pytest实际是python的一个单元测试框架,其他还有如unittest等,它可以实现按照规则搜索测试用例,对测试用例进行标记,如只执行L1级别的测试用例,测试执行用例失败后重新执行,测试用例的参数化等。
pytest不仅适用于UI自动化测试,也适用于接口自动化,对python语言进行单元测试等。
安装pytest
可以使用pip或者pycharm方式进行安装
打开pycharm,左上角File-settings-project:项目名-python interpreter,点击+,搜索pytest,然后install package。
第一个pytest脚本
import pytest
class TestDemo:
def test_01(self):
assert 1==1 # 断言成功
def test_02(self):
assert 1==2 # 断言失败
if __name__ == '__main__':
pytest.main(['-s','test.py'])
在文件输入如上代码。
在这个脚本中,我们首先导入了pytest模块,然后定义了一个class,并定义了两个方法,在方法里用assert进行断言。
assert是python自带的关键字。assert后面接一个表达式,只要表达式的最终结果为True,那么断言通过,用例执行成功,否则用例执行失败。可以看出,第一个方法里结果为true,第二个方法里结果为false。
在main主入口里,调用pytest的main方法,并传入模块名(即文件名)。
点击运行按钮,结果如下:
由结果可以看出,一共收集了两个用例,其中一个运行成功(用.表示),一个运行失败(F表示),失败的原因是1!=2
用例收集规则
pytest按照一定的规则进行用例的收集。
1. 模块名必须以test_开头或_test结尾
这里适用于未指定模块时的收集,如果运行单个文件,在main里指定要执行的文件,则无论这个文件名是什么,都会被执行。
如果在main里不指定模块,如只写pytest.main(),则pytest会默认从当前路径及其所有子目录中搜索py源文件,所有名字以test_开头或者以_test结尾的python源文件(.py文件)被认为是测试模块源文件,不符合这个命名规则的文件会被忽略。
2. 测试类必须以Test开头且不能有init方法
一个文件也可以只写测试方法,不写测试类。
3. 测试方法必须以test开头
在上面的示例脚本中,我们定义了两个test_开头的方法,所以收集了两个用例。非test开头的方法,会被pytest忽略。
运行方式
main函数运行
我们可以在main入口中调用pytest的main方法来运行文件,如上例。
不指定模块名
pytest.main(['-s'])
-s参数表示在控制台输出信息,当不指定模块名时,可以看到,收集了7条用例。
指定模块名
pytest.main(['-s','test.py'])
当指定了模块名后,运行文件,只收集当前文件的两条用例。
指定class
pytest.main(["-s", "test.py::TestDemo"])
我们也可以在模块名上加上指定的class名。
命令行窗口运行
不指定模块名
打开terminal,进入目标目录,直接执行“pytest”即可自动寻找当前目录下的测试用例。
指定模块名
打开terminal,输入pytest+模块名,指定模块执行。
pytest test.py
指定函数名
打开terminal,输入pytest+模块名+函数名,指定模块执行。
pytest test.py::TestDemo
test runner运行
在File-Settings如图路径,设置default test runner为pytest,点击OK。
再回到测试文件,可以看到类,方法前面都显示运行按钮,点击对应按钮,可以运行类,单独运行某个test。
也可以在不写main函数的情况下,右键以pytest运行文件。注意在配置了runner后,执行不会进入main主入口。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理