测试框架pytest的使用,可集成AirtestIDE的测试代码
使用测试框架的好处:
管理测试用例、提供断言方法、输出HTML测试报告。
1.1 pytest模板规范
-
测试文件以 test_开头(以_test结尾也可以)
-
测试类以Test开头,并且不能带有init方法
-
测试函数以test_开头
1.2 pytest的初识
下载
pip3 install pytest -i https://pypi.tuna.tsinghua.edu.cn/simple
导包
import pytest
运行pytest.main()
import pytest class TestPytestFirst(object): """docstring for TestPytestFirst""" def test_01(self): print('这是第一条用例') assert 1 == 1 def test_02(self): print('这是第二条用例') assert 1 =='1' if __name__ == '__main__': pytest.main()
控制台没有打印print() 输出,如需显示请添加以下参数:
pytest.main(['-s','-v'])
如果希望运行指定的测试文件,可以把文件全名放到列表list里面:
pytest.main(['-s','-v','my_test.py'])
1.3 pytest的执行顺序
和unittest一样用setup()和teardown()
import pytest class TestPytestFirst(object): """docstring for TestPytestFirst""" # 打开浏览器 def setup_class(self): print("=====setup_class()执行=====") # 关闭浏览器 def teardown_class(self): print("=====teardown_class()执行=====") def test_01(self): print('这是第一条用例') assert 1 == 1 def test_02(self): print('这是第二条用例') assert 1 =='1' # 用例执行前的初始化 def setup(self): print('这是在用例执行之前做的事') # 用例执行完的处理 def teardown(self): print('这是在用例执行之后做的事') if __name__ == '__main__': pytest.main(['-s','-v','myScripts_test.py'])
用例默认顺序是按照什么执行?
-
用例之间的顺序是文件之间按照ASCLL码排序,文件内的用例按照从上往下执行。
-
pytest默认按字母顺序去执行的(小写英文--->大写英文--->0-9数字)
-
setup_module->setup_class->setup_function->testcase->teardown_function->teardown_class->teardown_module
-
可以通过第三方插件
pytest-ordering
实现自定义用例执行顺序
官方文档: https://pytest-ordering.readthedocs.io/en/develop/
注意:一旦设置了自定义的执行顺序,就必须得延伸
@pytest.mark.run(order=1)
里面的order
字段
pip3 install pytest-ordering -i https://pypi.tuna.tsinghua.edu.cn/simple
应用方式:
-
第一个执行:
@ pytest.mark.run(order=1)
-
第二个执行:
@ pytest.mark.run(order=2)
-
倒数第二个执行:
@ pytest.mark.run(order=-2)
-
最后一个执行:
@ pytest.mark.run(order=-1)
代码:
import pytest class TestPytestFirst(object): """docstring for TestPytestFirst""" # 打开浏览器 def setup_class(self): print("=====setup_class()执行=====") # 关闭浏览器 def teardown_class(self): print("=====teardown_class()执行=====") @pytest.mark.last def test_01(self): print('这是order=2用例') assert 1 == 1 @pytest.mark.run(order=1) def test_02(self): print('这是order=1用例') assert 1 =='1' # 用例执行前的初始化 def setup(self): print('这是在用例执行之前做的事') # 用例执行完的处理 def teardown(self): print('这是在用例执行之后做的事') if __name__ == '__main__': pytest.main(['-s','-v','myScripts_test.py'])
1.4 pytest.ini配置规则
pytest.ini
[pytest] python_files=test_*.py *_test.py python_classes=Test* python_functions=test_*
附录
python3.x下应该改为如下方式:
import importlib
importlib.reload(sys)
yaml模块的使用
import yaml
#打开要读取的文件 [{} ,{}]
stream = open('../data/login.yaml','r')
#读取文件数据
data = yaml.load(stream,yaml.FullLiader)