快捷搜索: 王者荣耀 脱发

python接口自动化-xdist(5)

一、 使用场景

在日常功能测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟,如果单个测试人员执行需要1000分钟才能跑完
当项目非常紧急时,会需要协调多个测试资源来把任务分成两部分,于是执行时间缩短一半,如果有10个小伙伴,那么执行时间就会变成十分之一,大大节省了测试时间
为了节省项目测试时间,10个测试同时并行测试,这就是分布式执行
同样道理,当我们自动化测试用例非常多的时候, 一条条按顺序执行会非常慢,pytest-xdist的出现就是为了让自动化测试用例可以分布式执行,从而大大节省自动化测试执行的时间
pytest-xdist是属于进程级别的并发
1、分布式执行用例的设计原则(重点)
当然自动化测试用例要想能够分布式执行,还是要满足一些条件的:
2、分布式执行用例的设计原则(重点)
用例之间相互独立:保证用例之间没有依赖关系,用例可以完全独立运行
用例没有执行顺序:保证随机顺序的执行用例都可正常执行
用例之间互不影响:保证用例的运行结果不会影响到其他用例
3、
pip install pytest-xdist
pytest -s -n 2(auto 自动检测cpu核数,最大量并发)

二、 失败重跑

1、安装插件:
pip3 install pytest-rerunfailures
在pytest.ini文件中添加: addopts = -vs --reruns=5 --reruns-delay=3
--reruns n(重新运行次数),--reruns-delay m(等待运行秒数)

实战代码

import pytest, requests


class TestLogin:
    # 1.正确流程
    def test_login01(self):
        response = requests.post(url=http://127.0.0.1:5000/user_login,
                                 data={"username": "xiaohua", "password": "a123456"})
        res = response.json()
        print(res)
        assert {code: 1000, msg: 登录成功} == res

    # 2.用户名错误
    def test_login02(self):
        response = requests.post(url=http://127.0.0.1:5000/user_login,
                                 data={"username": "xiaoniu1", "password": "a123456"})
        res = response.json()
        print(res)
        assert "用户名或密码错误" in str(res)

    # 3.用户名为空
    def test_login03(self):
        response = requests.post(url=http://127.0.0.1:5000/user_login,
                                 data={"username": "", "password": "a123456"})
        res = response.json()
        print(res)
        assert res["msg"] == "用户名不能为空!" and res["code"] == "1003"  # 断言响应结果中的value值是否和预期结果一致

    # 4.密码错误
    def test_login04(self):
        response = requests.post(url=http://127.0.0.1:5000/user_login,
                                 data={"username": "xiaoniu", "password": "a1234567"})
        res = response.json()
        print(res)
        assert {code: 1005, msg: 用户名或密码错误!} == res

    # 5.密码为空
    def test_login05(self):
        response = requests.post(url=http://127.0.0.1:5000/user_login,
                                 data={"username": "xiaoniu", "password": ""})
        res = response.json()
        print(res)
        assert {code: 1004111, msg: 密码不能为空!} == res


if __name__ == "__main__":
    # pytest.main([-vs, ./test_pytest04.py])
    pytest.main([-vs, ./test_pytest04.py, -n=auto])  # 多线程执行
经验分享 程序员 微信小程序 职场和发展