33. Git 代码版本管理工具
Git 与 Github 介绍
- Git是版本控制工具,Github是个网站(基于Git的,允许你使用Git在Github上做项目)
- oschina.net ---> 码云(相当于中文版的Github,也是基于Git的)---> 帮助文档里面有Git的介绍,与安装地址 ---> 看pro Git(中文版)文档内容(git.oschina.net/progit/)---> 有windows版本的安装教学
- Git有自带的图形化界面客户端(GUI)| 但更推荐使用SourceTree.app 来操作,可以用GUI来操作项目的提交更新,也可以用Git命令行来操作
Git下载
Git配置 ($可以不用管)
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
git config --list # 查看配置信息
Git常用命令
- 一个项目本质上就是一个文件夹里面又有很多文件夹和文件,假设现在在你电脑桌面有一个叫“项目”文件夹
- 要通过Git去提交和管理这个项目:
- 在命令行中,首先要进到这个项目这个文件夹下,“cd ./Desktop/”项目
- 以后更新一个文件以后,都要重新add一下,再commit
初始化一个git项目(告诉git这个项目让它管理)
git init
查看当前的文件的git的状态
如果提示 “Not a git repository ” 意味着,不是一个git项目,需要使用git init进行初始化
如果提示 “Untracked files ” 意味着,文件没有被追踪
git status
告诉git,管理某个文件(追踪某个文件)
git add <文件名> # 添加一个文件进行追踪
git add . # 添加所有的文件
提交版本
git commit -m "注释"
Sourcetree 安装好后的账户问题
https://blog.csdn.net/jiangyu1013/article/details/78850735
进入这个文件夹:C:\Users\你的电脑名字\AppData\Local\Atlassian\SourceTree , 在此找到或者新建一个 json 类型的文件,取名为:accounts.json。
即:在这个目录下新建一个全名为 accounts.json
的文件。
注意: Windows
系统文件后缀是默认隐藏的,需要先显示文件的后缀名,然后随便新建一个 文本文档
,将文件全名改为 accounts.json
即可。然后把下面内容复制进去accounts文件中
[
{
"$id": "1",
"$type": "SourceTree.Api.Host.Identity.Model.IdentityAccount, SourceTree.Api.Host.Identity",
"Authenticate": true,
"HostInstance": {
"$id": "2",
"$type": "SourceTree.Host.Atlassianaccount.AtlassianAccountInstance, SourceTree.Host.AtlassianAccount",
"Host": {
"$id": "3",
"$type": "SourceTree.Host.Atlassianaccount.AtlassianAccountHost, SourceTree.Host.AtlassianAccount",
"Id": "atlassian account"
},
"BaseUrl": "https://id.atlassian.com/"
},
"Credentials": {
"$id": "4",
"$type": "SourceTree.Model.BasicAuthCredentials, SourceTree.Api.Account",
"Username": "",
"Email": null
},
"IsDefault": false
}
]
重新打开sourcetree
会提示“检测到没有Mxxxxxxx。接下来,会通过以下三种方式进行解决。”
选最后一个,“我不使用”
注册github账号
Github学习网址:https://guides.github.com/activities/hello-world/
打开 github.com
点击 sign up
把代码如何放在github上
Github头像旁边的“+”号,点击会有“New repository” ---> 点击“新建仓库”
“Repository Name” ---> 输入“仓库名称”就是你的项目名字
有个 desc 的描述,可选
后面三个,“readme” “忽略文件” “开源协议(许可证)”, 都不选择。
此处,下一步,会有提示,其中HTTPS
旁边会有一个项目链接地址,以后再Sourcetree中就可以通过这个地址来下载到这个项目
使用cmd进入到 需要的提交的项目的目录下。再去使用,提示的命令。(第一次,中途会提示输入github用户名和密码)
git init # 初始化项目
git add . # 把当前目录下的所有文件,交给git管理
git commit -m "first commit" # 提交,这是本地已有一个仓库,可以通过本地的sourcetree来查看项目
git remote add origin https://github.com/hitheima/popopo.git # 建立远端连接
git push -u origin master # 推送到远端,就是把项目上传到github
如何下载github的项目
- download zip 下载
- 进入项目主页,右侧有一个绿色的按钮,点击后,选择download zip即可
- clone 克隆
- 从远端第一次放到本地的过程叫做克隆(等价于SVN的cheakout)
- 在github主页上,项目会有一个地址,通过sourceTree进行克隆
- sourceTree点击新仓库,从url克隆。
- 将GitHub上的那个“xxxx.git”的地址,赋值到soureceTree中的url中。
- 选择,存放路径即可。
- Fork
- 将别人的项目复制到自己的账户下,但此时已经是两个项目,原来项目的人修改项目,你账户下的项目是不会修改的;同样的,你自己去修改这个项目,别人原项目那里也是没有联系的
PULL
在github也是可以对代码进行修改的,项目组别的成员对代码修改后,重新提交,之后你就要PULL一下
作用,已经本地和远端建立连接的情况下(已经clone过了),将远端的代码,同步到本地。(让本地保持和远端一样)。这个过程叫做pull
在sourceTree中,使用点击“拉取”,点击确定。
切换版本
切换版本,就是可以快速的预览,之前的文件的情况。
在sourceTree中,直接双击你想要查看的以前版本的文件即可。
多次commit后再push
如果本地项目进行修改之后,sourceTree会提示,修改文件的个数。
如果想使用sourceTree进行提交,需要先勾选“暂存的文件”(需要提交什么,就勾选什么。允许部分提交),再去点右上角的“提交”,提交的时候要添加你修改了什么的注释
提交之后,此时远端并不会发生变化。需要进行一次push(推送),让远端同步本地的代码。让远端和本地保持一致。
关于提交时间
提交的时间,以每次commit为准。与push无关。
提交的时候同时推送
在提交写注释的时候,最下方有一个,“立即推送并更变 orgin/master”。
这个选项,表示:提交并且推送到远端
小总结
commit
push
pull
clone
add
init
冲突
冲突发生的情况,在多个人开发中,出现了,同一个文件同一行代码的修改。会产生这个问题。所以会提示,在提交push之前先去pull一下,把远端的版本更新到本地,再去提交push。此时,在pull的时候,就会发生冲突。(当远端的某一个文件的某一行。和本地不同, 并且不是之前的版本)
解决的问题的方法,需要自己权衡。保留或者删除。删除多余的<<<< ===== >>>> 相关信息
以后建议,commit 和 push之前都去pull一下
<<<<<< HEAD
print(1)
======
print(2)
>>>>>> 8ux8vus8fsd8fus8dufs
HEAD部分是自己的代码
远端版本号8ux8vus8fsd8fus8dufs的代码是远端的代码
重新提交commit,并推送push。
34.Allure报告
Allure介绍
Allure是一个独立的报告插件,生成美观易读的报告,目前支持语言:Java, PHP, Ruby, Python, Scala, C#。
Allure安装
1.安装pytest的插件包pytest-allure-adaptor: pip3 install pytest-allure-adaptor
Allure帮助文档
https://docs.qameta.io/allure/#_about
生成Allure报告
命令行参数:pytest --alluredir report # 在执行命令目录生成report文件夹,文件夹下包含xml文件
- 示例
pytest.ini
[pytest]
# --html=./report.html
# 删除原生--html=./report.html,换成Allure
addopts = -s --alluredir report
# 测试路径
testpaths = ./Test
# 测试文件名
python_files = test_*.py
# 测试类名
python_classes = Test_*
# 测试的方法名
python_functions = test_*
test_all.py
class Test_allure:
def setup(self):
pass
def teardown(self):
pass
def test_al(self):
assert 0
操作步骤:
1.命令行进入pytest.ini所在目录
2.输入命令:pytest
执行结果:
1.pytest.ini所在目录生成report文件夹,文件夹下生成一个xml文件
xml转html工具安装
mac版本
1.:brew install allure
2.进入report上级目录执行命令:allure generate report/ -o report/html
3.report目录下会生成index.html文件,即为可视化报告
windows版本
1.下载压缩包allure-2.6.0.zip
地址:https://bintray.com/qameta/generic/allure2
2.解压
3.将压缩包内的bin目录配置到path系统环境变量
4.进入report上级目录执行命令:allure generate report/ -o report/html --clean
5.report目录下会生成index.html文件,即为可视化报告
35.Allure之Pytest
添加测试步骤
方法:@allure.step(title="测试步骤001")
示例:
test_all.py
import allure, pytest
class Test_allure:
def setup(self):
pass
def teardown(self):
pass
@allure.step('我是测试步骤001')
def test_al(self, a):
assert a != 2
添加测试描述
方法:allure.attach('描述', '我是测试步骤001的描述~~~')
相当于给脚本里面的代码内容加注释,这里第二个参数也可以放图片
示例:
test_all.py
import allure, pytest
class Test_allure:
def setup(self):
pass
def teardown(self):
pass
@allure.step('我是测试步骤001')
def test_al(self, a):
allure.attach('描述', '我是测试步骤001的描述~~~')
assert a != 2
添加严重级别
测试用例设置不同的严重级别,可以帮助测试和开发人员更直观的关注重要Case.
方法:@pytest.allure.severity(Severity)
参数:
Severity:严重级别(BLOCKER,CRITICAL,NORMAL,MINOR,TRIVIAL)
使用方式:
@pytest.allure.severity(pytest.allure.severity_level.CRITICAL)
示例:
test_all.py
import allure, pytest
class Test_allure:
def setup(self):
pass
def teardown(self):
pass
@pytest.allure.severity(pytest.allure.severity_level.CRITICAL)
@allure.step('我是测试步骤001')
def test_al(self, a):
allure.attach('描述', '我是测试步骤001的描述~~~')
assert a != 2
36.Jenkins安装
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,
旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
有了Jenkins后期我们只需要写代码,不需要我们再去敲pytest来运行,只要代码传到了Github,
在Git的管理下,我们更新了代码,Jenkins就会帮我们去编译,有bug时帮我们去发邮件给开发人员。
一般情况下,公司内部Jenkins安装在服务端,不需要本地安装,都已配置完成,可直接操作使用。
那么我们之后就要在浏览器输入服务器的地址,而不是localhost本机地址
- 依赖java环境
jdk1.5以上
安装jenkins
1.下载jenkins.war ---> 开启服务用的
2.进入jenkins.war所在目录,执行:java -jar jenkins.war ---> 开启服务命令
3.浏览器进入:localhost:8080
此时在你用户的文件夹下会多了一个.jenkins的文件夹,里面就包括了你用户信息
还有安装的一些插件信息
安装所需插件
1.官网下载jenkins安装包
2.安装完成后,会自动打开页面(若没有可以手动打开浏览器输入:localhost:8080)
3.进入默认密码提示文件,输入系统默认密码
4.安装建议插件
5.设置用户初始化信息
6.jenkins启动
7.jenkins首页
37.Jenkins持续集成配置
Jenkins安装Allure插件
1.进入jenkins系统管理 -> 管理插件
2.点击可选插件
3.搜索框输入Allure Jenkins Plugin
4.选中安装
这个插件就相当于,之前我们运行pytest,Allure就会帮我们生成一个xml文件的那个步骤
Jenkins安装Allure Commandline工具
1.进入jenkins系统管理 -> 全局工具配置
2.找到Allure Commandline,点击Allure Commandline安装
3.输入一个别名,在From Maven Central 选择一个Allure版本号
4.点击新增安装-选择解压/*.ip/*.tar.gz
5.解压目录选择已下载好的allure2.5.0.zip包所在目录(⚠️ 版本要一致)
6.点击保存
这个插件就是用命令行帮我们把xml换成html的文件
Jenkins新建一个项目
1.点击左上角的新建,输入任务名称,选择新建一个自由风格的软件项目 -> 点击确定
2.输入一些项目描述
3.选择GitHub project ,监听github上的代码变化
4.输入Project url # 因我们只是举例,所以使用自己的一个github测试脚本
源码管理配置
5.勾选Git
6.Repository URL输入地址同第四步
7.点击Add添加github的用户名和密码
构建触发器
- 我们之前在pycharm的terminal去输入pytest,然后代码运行,实际上就是在构建一个项目,现在我们想Jenkins帮我们去输入pytest的命令,就要先构建触发器
8.勾选Poll SCM # 根据定时任务,查看github版本是否更新,如果更新会自动构建项目
9.输入crontab命令
举例:
*/1 * * * * # 每一分钟检查一次
10.点击增加构建步骤,mac的话选择Execute shell,
windows的话选择Execute Windows batch command
11.接下来,在Command框输入
mac:
export PATH=$PATH:"pytest可执行文件的目录"
pytest
windows:
PATH=$PATH;"pytest.exe可执行文件的目录"#(到scripts)告诉Jenkins pytest在哪
# pytest.exe 应该是在python下的scripts文件夹里
pytest # Jenkins知道了pytest在哪以后,才能执行pytest的命令
时程表的格式如下:
f1 f2 f3 f4 f5 program
其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,
f5 表示一个星期中的第几天。program 表示要执行的程式。
构建后操作
12.点击增加构建后操作步骤,选择Allure Report
13.Path路径输入:生成的报告所在的文件夹名称
⚠️ 文件夹名称与pytest生成的报告所在的文件夹名称一致,要与pytest.ini中的一致
14.点击保存
38.jenkins触发项目构建方式
手动触发构建
- 所以以后流程就是在pycharm中写代码,然后提交到github,再去Jenkins去看报告就可以了
- 点击立即构建
更新github代码
- 触发器在定时任务到达时,会触发项目构建
-
项目构建完成以后,如果github上的代码没有更新,是不会再去构建的
手动构建
39.Jenkins邮件配置
发件人配置
1、测试发件人好不好使
配置邮件系统用户:
系统管理-系统设置-Jenkins Location
系统管理员邮件地址:用户名@163.com(发送邮件用户,建议使用163邮箱)
配置系统邮件:
系统管理-系统设置-邮件通知
不同平台的smtp服务器地址不一样,自己去百度一下就好了
SMTP服务器:例 smtp.163.com
用户默认邮件后缀:例如 @163.com
高级-使用SMTP认证
输入发送邮箱和密码 -点击“通过发送测试邮件测试配置”,输入一个可以收到邮件的邮箱地址,
可以是自己的,关键要在收到邮件后看发件人对不对
这里输入的密码不是邮箱的密码,例如在163邮箱中,点设置-客户端授权密码-点开启-开启以
后你自己设置的是什么密码,这里就填什么密码
2、配置发件人
配置(发送附件)邮件:
系统管理-系统设置-Extended E-mail Notification
SMTP server:例 smtp.163.com
Default user E-mail suffix:例如 @163.com
高级-Use SMTP Authentication - 输入发送邮件的邮箱和密码
Default Content Type: HTML(text/html)
Default Content(报告模版,使用以下html代码即可):
<hr/>(本邮件是程序自动下发的,请勿回复!)<hr/>
项目名称:$PROJECT_NAME<br/><hr/>
构建编号:$BUILD_NUMBER<br/><hr/>
git版本号:${GIT_REVISION}<br/><hr/>
构建状态:$BUILD_STATUS<br/><hr/>
触发原因:${CAUSE}<br/><hr/>
目录:${ITEM_ROOTDIR}<br/><hr/>
构建日志地址:<a href=" ">${BUILD_URL}console</a ><br/><hr/>
构建地址:<a href="$BUILD_URL">$BUILD_URL</a ><br/><hr/>
报告地址:<a href="${BUILD_URL}allure">${BUILD_URL}allure</a ><br/><hr/>
失败数:${FAILED_TESTS}<br/><hr/>
成功数:${FAILED_TESTS}<br/><hr/>
变更集:${JELLY_SCRIPT,template="html"}<br/><hr/>
收件人配置
# 添加测试报告接收邮件列表
点击你的项目名字 - 点击配置 - 构建后操作
14.点击增加构建后操作步骤,选择Editable Email Notification
15.点击Advanced Setting…
16.点击Triggers中的高级按钮
17.Recipient List输入邮件接收列表,多个邮件逗号分隔
40.XPath精确查找
//*[@text='Android']
用于查找某个属性是否等于某个值,而非包含。
41.XPath多条件查找
//*[@text='Android' and index='0']
用于通过多个条件进行查找
文件管理器
- 第一个
- 打开文件管理器
- 在sdcard新建一个zzz文件夹
- 在sdcard新建一个aaa文件夹
- 进入zzz文件夹
- 在zzz中创建文件 1.txt-20.txt
- 把zzz中的20个文件移动aaa中
- 判断-aaa有20个文件目录
目录
- 项目名字
- pytest.ini
- scripts
- - test_file
- page
- - file_page
- base
- - xxxx
test_file.py - 自动化脚本
脚本中有11个函数
1. 第一个
2. 如果属性弹窗中名字内容和所在位置一致 那么通过
3-10. 出了属性之外的左下角菜单所有功能
11. test_fail
assert 0
尽量写上allure的log
邮件模板,最上面加上自己的名字
邮箱:hitheima@163.com
小作业
元素定位和操作练习
- 点击搜索按钮
- 输入“无线”
- 获取当前有几条记录?
滑动和拖拽时间练习
- 想办法滑动到最后的“关于手机”
- 点击进去
- 看当前页面是不是有一个“5.1”的字符串
常用代码
前置代码
from appium import webdriver
# server 启动参数
desired_caps = {}
# 设备信息
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '5.1'
desired_caps['deviceName'] = '192.168.56.101:5555'
# app的信息
desired_caps['appPackage'] = 'com.android.settings'
desired_caps['appActivity'] = '.Settings'
# 解决输入中文
desired_caps['unicodeKeyboard'] = True
desired_caps['resetKeyboard'] = True
# 声明我们的driver对象
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
获取包名
1.Mac/Linux: 'adb shell dumpsys window windows | grep mFocusedApp’
2.在 Windows 终端运行 'adb shell dumpsys window windows’ 然后去看mFocusedApp这一行的内容。
xPath
//*[contains(@,'')]
capabilities启动参数列表
keyevent常用键列表
- 常用键展示
KEYCODE_CALL 拨号键 5
KEYCODE_ENDCALL 挂机键 6
KEYCODE_HOME 按键Home 3
KEYCODE_MENU 菜单键 82
KEYCODE_BACK 返回键 4
KEYCODE_SEARCH 搜索键 84
KEYCODE_CAMERA 拍照键 27
KEYCODE_FOCUS 拍照对焦键 80
KEYCODE_POWER 电源键 26
KEYCODE_NOTIFICATION 通知键 83
KEYCODE_MUTE 话筒静音键 91
KEYCODE_VOLUME_MUTE 扬声器静音键 164
KEYCODE_VOLUME_UP 音量增加键 24
KEYCODE_VOLUME_DOWN 音量减小键 25
KEYCODE_ENTER 回车键 66
KEYCODE_ESCAPE ESC键 111
KEYCODE_DPAD_CENTER 导航键 确定键 23
KEYCODE_DPAD_UP 导航键 向上 19
KEYCODE_DPAD_DOWN 导航键 向下 20
KEYCODE_DPAD_LEFT 导航键 向左 21
KEYCODE_DPAD_RIGHT 导航键 向右 22
KEYCODE_MOVE_HOME 光标移动到开始键 122
KEYCODE_MOVE_END 光标移动到末尾键 123
KEYCODE_PAGE_UP 向上翻页键 92
KEYCODE_PAGE_DOWN 向下翻页键 93
KEYCODE_DEL 退格键 67
KEYCODE_FORWARD_DEL 删除键 112
KEYCODE_INSERT 插入键 124
KEYCODE_TAB Tab键 61
KEYCODE_NUM_LOCK 小键盘锁 143
KEYCODE_CAPS_LOCK 大写锁定键 115
KEYCODE_BREAK Break/Pause键 121
KEYCODE_SCROLL_LOCK 滚动锁定键 116
KEYCODE_ZOOM_IN 放大键 168
KEYCODE_ZOOM_OUT 缩小键 169
KEYCODE_ALT_LEFT Alt+Left
KEYCODE_ALT_RIGHT Alt+Right
KEYCODE_CTRL_LEFT Control+Left
KEYCODE_CTRL_RIGHT Control+Right
KEYCODE_SHIFT_LEFT Shift+Left
KEYCODE_SHIFT_RIGHT Shift+Right
- 官方keyevent文档
地址: https://developer.android.com/reference/android/view/KeyEvent.html