手把手教你pytest测试框架—— 初识框架
Posted 程序员二黑
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手把手教你pytest测试框架—— 初识框架相关的知识,希望对你有一定的参考价值。
pytest测试框架
简介
pytest是Python的测试框架,类似于unittest,但比unittest更简洁,直接,易上手,功能更强大,且可兼容unittest的代码。
它可以实现,执行用例时跳过某些用例、用例执行失败后可重新执行、对执行失败的用例进行标记等。
pytest有丰富的第三方插件,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等。
pytest还支持自定义扩展。
安装
pip install pytest
安装后,可通过pytest –version命令查看版本
文件、类及函数命名及书写规则
使用pytest,文件、类、函数不能随意命名,必须按照其规则进行命名,否则pytest无法识别。
- 测试文件以test_开头(以_test结尾也可)
- 测试类以Test开头,注意,Test首字母要大写
- 测试类名称后面直接跟冒号,而不能有()
- 测试类不能带有 init 方法
- 测试类里的每个函数都必须有参数(self)
- 测试函数以test_开头,注意,这时首字母要小写
- 断言使用基本的assert即可
一个简单的pytest实践
先创建一个文件叫做test_study.py,注意文件名是以test_开头的,符合pytest规则,在这个文件里写一段简单的程序:
# coding=utf-8
def func(x):
return x + 1
def test_answer():
assert func(3) == 5
在这里,test_answer()是以test_开头的,这符合规则,但func(x)则无需按规则命名,因为我们测试的是test_answer()函数,如果想测试func(x)函数,那么也需把它按规则命名
无需import pytest,写完两个函数后也无需调用它们,注意,第二个函数里面调用了第一个函数,且使用了断言,且故意使断言语句发生错误,func(3)的正确值应为4,但故意写成5以制造一个错误
执行的时候,不要在pycharm里直接执行,要在pycharm的terminal里或以管理员身份在命令行窗口里输入pytesttest_study.py(执行方式实际不止这两种,实际是三种,后文书介绍)
执行结果:
terminal:
命令行:
二者的结果是一样的,其中有如下结果:
def test_answer():
> assertfunc(3) == 5
E assert 4 == 5
E + where 4 = func(3)
它告诉我们,def test_answer()这个函数发生错误,断言应为4,但实际给的值是5。
执行方式
Terminal执行
第一是在pycharm的Terminal里输入命令来执行,如pytest -s test_study.py -m=mn1
以管理员身份在命令行执行
第二是以管理员身份在命令行窗口里输入命令来执行,如pytest -stest_study.py -m=mn1
main语句块执行
第三是在python代码本身里执行,这种方式需要:
- 把命令写到main语句块里
- 在pytest后面加上.main
- 把参数、文件名称用引号引起来
如pytest.main([“-s”,“test_study.py”, “-m=mn1”])
调用执行
如果把调用语句单独写出来,并且不放到main语句块里,那么也是可以执行用例的,比如下面的写法:
# coding=utf-8
import pytest
class Test_case():
def test_case4(self):
print("执行用例4")
def test_case5(self):
print("执行用例5")
pytest.main(["-s"])
但是这种写法很容易出错,经常会把用例执行多遍,原因尚不明,所以要杜绝这种写法,解决这个问题的方法有两种:
-
把执行语句单独放到一个文件里,如下面的写法:
直接执行这个文件,就可以正确执行相应的用例了。 -
把执行语句封装成函数,再调用这个函数,如下面写法:
execute.py文件里封装了执行语句,再在main.py里调用它:
这样就可以了。
特别注意:如果采用了以上两种方法,仍然出现用例执行多遍的现象,通常是在某个文件里的main语句块外写上了执行语句,再强调一遍,那种写法容易造成用例执行多遍,必须严格杜绝。
需要注意的一个问题
不论是在Terminal、命令行,还在main语句块里,输入执行命令时等号两端都不能有空格,如这样:“-m = mn1”。
虽然等号两端加空格在python里是一种常用写法,但在使用pytest时则不被语法允许,尤其要注意当在main语句块里写命令的时候,由于就是在代码中去写,所以很容易习惯性地把等号两端加上空格。(未完待续)
学习资源分享
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走
这些资料,对于想进阶【自动化测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助…….
关注下方我的公众号免费获取!
以上是关于手把手教你pytest测试框架—— 初识框架的主要内容,如果未能解决你的问题,请参考以下文章
单元测试界的高富帅,Pytest框架,手把手教学,以后测试报告就这么做~
单元测试界的高富帅,Pytest框架,手把手教学,以后测试报告就这么做~
单元测试界的高富帅,Pytest框架,手把手教学,从入门到精通
单元测试界的高富帅,Pytest框架,手把手教学,从入门到精通
手把手教你用Eclipse+TestNG搭建接口自动化测试框架
《手把手教你》系列基础篇(七十二)-java+ selenium自动化测试-框架设计基础-TestNG简单介绍(详解教程)