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'])  # 多线程执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值