目录
一、环境部署
首先Python环境是必须要装的,其次是pycharm和pytest库。其它可以按需要选择安装,后面可能会用到:
库/插件/工具 | 安装方法 | 用途 | |
1 | 安装python 3.x | ||
2 | 安装pycharm |
| |
3 | 安装pytest库 | pip install pytest | pytest库 |
4 | 安装yaml | pip install pyyaml | 配置文件 |
5 | 安装pytest -html | pip install pytest-html | 生成html报告 |
6 | 安装allure | pip install allure-pytest | 描述测试用例 |
二、用例设计原则
主要有四点:
1、测试用例的文件名以test_*.py或*_test.py命名;
2、方法或函数以test_开头;
3、类以Test_开头;
4、所有的包必须要有__init__.py文件。
另外,想要直接在pycharm上执行测试用例,用例后必须加上:
if __name__ == "__main__":
pytest.main('-q 用例.py')
三、判断用例执行结果的方法
pytest通过assert断言来设置用例的预期执行结果,并判断实际执行结果是否与之一致,使用方法如下:
1、测试大小是否相等, assert可以使用直接使用“==”、“!=”、“<”、“>”、“>=”、"<=" 等符号来比较相等、不相等、小于、大于、大于等于和小于等于,例如:
assert 1 != 2
2、测试包含和不包含,assert 可以直接使用 in 和not in 来比较包含与不包含,例如:
assert a in b
3、测试true或false,assert可以不需要任何辅助符号,直接判断对象是否为ture, assert not 用于判断是否为false,例如:
assert 1
断言失败一般可以看到以下输出,代表用例的执行结果failure与我预期的success不符,即这条用例执行失败:
当然,也可以如下所示,指定断言失败的返回信息:
assert a % 2 == 0, "值为奇数,应为偶数"
除此之外,pytest可以在断言的比较中提供丰富的上下文信息。例如:
def test_set_comparsion():
set1 = set("111")
set2 = set("222")
assert set1 == set2
四、yaml配置文件
1、yaml(Yet Another Markup Language):是一种专门用来写配置文件的语言。
2、yaml的基本语法规则:
大小写敏感;
使用缩进表示层级关系(注意:这里只允许使用空格来表示缩进,空格数目不重要,不允许使用Tab键);
相同层级的元素左侧需对齐;
使用 # 表示注释;
3、yaml支持的三种数据结构:
对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary);
数组:一组按次序排列的值,又称为序列(sequence) / 列表(list);
纯量(scalars):单个的、不可再分的值。字符串、布尔值、整数、浮点数、Null、时间、日期;
4、读取和转换方法
用open方法读取yaml文件的数据;
再通过load方法转成字典;
比如说,我把Linux虚拟机的一些信息放到config.yaml文件里:
hostname: '10.2.12.87' #ip
port: 22
username: 'root'
password: '123456'
那么在用例中,就可以直接读取config.yaml文件,使用这些数据:
file = open("/TestData/config.yaml", encoding='utf-8')
res = yaml.load(file, Loader=yaml.Fullloader)
hostname = res['hostname']
port = res['port']
username = res['username']
password = res['password']
五、常用的执行用例的方法
1、执行某个文件夹下的所有用例:
pytest 文件夹名/
2、执行单条用例
pytest 用例.py
3、-k EXPRESSION按关键字匹配
pytest -k 'test_method or test_other'
将运行名称包含'test_method' 或 'test_other'的所有方法或类
4、-m MARKEXPR标记表达式
将运行用@ pytest.mark.slow装饰器修饰的所有测试
5、-v 增加冗余的用例执行输出;-q减少冗余的用例执行输出
6、-x 一旦遇到错误立即停止执行
7、--maxfail=num 错误达到一定的数量时停止执行
8、--lf(--last-failed)只运行上次运行失败的用例
9、--ff(--failed-first)优先执行上次运行失败的用例,再运行其他用例
10、-s 打印用例里print的内容
六、测试报告的生成
pytest-html模块用于生成测试报告,如果想生成测试报告,可以按照这样的方法执行用例:
pytest 用例.py --html=/路径/report.html
或者这样执行,可以把css样式合并到html里:
pytest --html=/路径/report.html --self=contained-html
报告的效果是这样的: