这些是之前的文章,里面有一些基础的知识点在前面由于前面已经有写过,所以这一篇就不再详细对之前的内容进行描述
Python自动化测试实战篇(1)
Python自动化测试实战篇(2)
Python自动化测试实战篇(3)
Python自动化测试实战篇(4)
Python自动化测试实战篇(5)
Python自动化测试实战篇(6)
Python自动化测试实战篇(7)
Python自动化测试实战篇(8)
Python自动化测试实战篇(9)
Python自动化测试实战篇(10)
Python自动化测试实战篇(11)
先在E盘目录创建一个rep.txt文件
然后cmd进入E盘后
通过pip3批量安装文件内的插件
pip3 install -r rep.txt
pytest-django
pytest-ordering
pytest-rerunfailures
pytest-assume
pytest-xdist
pytest-sugar
pytest-cov
pytest-picked
pytest-instafail
pytest-tldr
django-test-plus
pytest-html
需要在django进行测试的方法,pytest中也有相应的方法,只需要在django的根目录下创建pytest.ini文件
再Terminal终端中输入pytest即可遍历所有的文件内的测试用例
如果要单独指定一个即用pytest testxxx.py以test开头的文件即可进行相应的单元测试。
设定执行顺序,可以通过ordering来设置执行顺序,从而来制定优先执行那一条测试用例
import pytest
@pytest.mark.run(order=2)
def test_1():
print("测试1")
@pytest.mark.run(order=1)
def test_2():
print("测试2")
if __name__ == '__main__':
pytest.main(["-vs", "t1.py"])
可以看到修改后的测试用例执行顺序发生了改变,测试用例2优先执行
失败重跑插件
用法:pytest test_3.py --reruns 2 --reruns-delay 2 -vs
失败后重新跑2次,间隔2秒
import pytest
import requests
url = "http://127.0.0.1:4523/m1/2459729-0-default/registersearch?user=admin&password=123456"
payload={}
headers = {
'User-Agent': 'Apifox/1.0.0 (https://apifox.com)',
'Accept': '*/*',
'Host': '127.0.0.1:4523',
'Connection': 'keep-alive'
}
@pytest.fixture(autouse=True)
def login(request):
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
yield
print("测试结束")
class TestFixture:
def test_case001(self,login):
res = requests.request("GET", url, headers=headers, data=login)
assert res.status_code == 200
print("接口连接成功")
print(res.text)
def test_case002(request):
print(request)
print("测试用例2")
if __name__ == '__main__':
pytest.main(["-vs", "test3.py"])
断言报错继续执行
当有断言出现错误时将不会继续执行,本插件就是为了让断言能够在出错的情况下继续执行
用法:pytest.assume(3 > 2)
import pytest
def test_assume():
print("测试1")
pytest.assume(1 < 2)
print("测试2")
pytest.assume(2 > 2)
print("测试3")
pytest.assume(3 > 2)
if __name__ == '__main__':
pytest.main(["-vs", "t1.py"])
分布式测试
可调用多个CPU内核进行同时测试
用法:pytest -n 6 表示用6个cpu进行测试
pytest -n auto 表示系统自动检测cpu,会占用所有的cpu
pytest -n auto testxxx.py
终端输入pytest -n auto t1.py
可以看到调用了所有的cpu进行测试
精准测试,可以显示那些已经测试过,那些还没有被测试过。
也可以用来检验代码覆盖率能够达到多少
用法:pytest --cov
在终端上执行
输出生成html报告
用法:pytest --cov --cov-report=html
然后双击index.html即可看到代码的覆盖率
点开来看就可以看到未覆盖的代码。
运行为未提交git的测试用例
用法:pytest --picked
pytest --picked=first首先运行被更改的文件
pytest --picked --mode=branch --parent-branch=main运行分支文件
运行用例完成后直接实时打印错误
用法: pytest --instafail
简化错误信息,由于乱七八糟的错误信息让人看的眼花缭乱所以需要增加一个结构简单明了的错误信息观察
用法:pytest
关闭tldr:pytest -p no:tldr xxx.py
注意:如果你用了pytest-sugar你又装了tldr那么你的sugar的颜色将不会显示出来,为了更好的效果和体验可以把tldr卸载。
在终端指定pytest 输出方法 --html 地址 名称
后即可生成一个html格式的测试报告
pytest -vs --html ./pytest01/result.html
更多pytest插件可以通过下面的网址获取。
随机执行测试用例,可以对用例进行打乱后进行随机测试。
用法:–random-order(默认随机测试)
将对以下代码进行随机测试
import pytest
import requests
url = "http://127.0.0.1:4523/m1/2459729-0-default/registersearch?user=admin&password=123456"
payload={}
headers = {
'User-Agent': 'Apifox/1.0.0 (https://apifox.com)',
'Accept': '*/*',
'Host': '127.0.0.1:4523',
'Connection': 'keep-alive'
}
@pytest.fixture(autouse=True)
def login(request):
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
yield
print("测试结束")
class TestFixture:
def test_case001(self,login):
res = requests.request("GET", url, headers=headers, data=login)
assert res.status_code == 200
print("接口连接成功")
print(res.text)
def test_case002(request):
print(request)
print("测试用例2")
assert 1 ==2
def test_case003(request):
print(request)
print("测试用例3")
assert 1 !=2
def test_case004(request):
print(request)
print("测试用例4")
assert 1 >2
def test_case005(request):
print(request)
print("测试用例5")
assert 1 <2
def test_case006(request):
print(request)
print("测试用例6")
assert 1+2==5
if __name__ == '__main__':
pytest.main(["-vs", "test_3.py"])
终端执行:pytest -v --random-order test_3.py
可以看到随机打乱顺序进行用例测试
终端使用global参数进行测试:pytest -v --random-order-bucket=global test_3.py
禁用随机插件方法:pytest -p no:random_order
pytest插件网址