Pytest基础使用

Pytest基础使用

前言:Pytest是一款成熟的Python测试框架,完全正向兼容unittest。简洁可以实现参数化,自带测试报告;第三方库注意版本兼容。

pip install pytest==6.0.1
pip install pytest-html==3.1.1

1,Pytest用例执行规则

  1. 类的名字建议使用Test大头
  2. 用例函数的名字 必须test开头,区分大小写

import pytest

class Test11():

    def test_login11(self):
        print(" 正在执行登录用例第一条 ")

    def test_login22(self):
        print(" 正在执行登录用例第二条 ")

    def test_login33(self):
        print(" 正在执行登录用例第三条 ")

if __name__ == '__main__':
    pytest.main(['-v','-s','test11.py'])
  • 整个参数是以列表的形式传入
  • -v 参数显示命令执行过程, -s 参数显示打印的信息
  • 如不加 -s 参数,则 print() 函数打印的信息不会显示
  • ‘test11.py’ 是测试文件名字 *必须写的
针对加减乘除功能测试

class Count:
    def __init__(self,a,b):
        self.a=int(a)
        self.b=int(b)
    def add(self):
        return self.a + self.b
    def sub(self):
        return self.a - self.b
    def mul(self):
        return self.a * self.b
    def div(self):
        return self.a / self.b

import pytest
class TestAdd():
    def test_add1(self):
        assert Count(2,3).add() == 5
    def test_add2(self):
        assert Count(21,31).add() == 52
    def test_add3(self):
        assert Count(40,70).add() == 110
if __name__ == '__main__':
    pytest.main(['-v','-s','jwtest.py'])

2,断言和测试固件

上面代码中使用的 assert 就是断言Pytest是使用断言来判断实际结果和预期结果是否相同;

测试断言
  • 判断是否相等

    assert x == y assert x != y

  • 判断是否真假

    assert x 预期结果是True assetrt not x 预期结果是False

  • 判断是否包含

    assert x in y

测试固件
  • 类级别

    setup_class() 所有测试用例执行前执行一次 teardown_class() 所有测试用例执行后执行一次

  • 函数级别(每条测试用例都会执行)

    setup() 用例执行前 teardown() 用例执行后

3,参数化-单个参数化

参数化概念

​ 在接口用例中 单个参数的参数化的作用是主要读出所有的测试用例放到列表中,然后依次取出列表中的用例供函数使用,从而完成每一个用例的执行。

单个参数化语法
@pytest.mark.parametrize(argnames,argvalues)
import pytest

@pytest.mark.parametrize("username",["张三","李四","王五"])
def test_login(username):
    print(f"登录用户数据为 {username}")
if __name__ == '__main__':
    pytest.main(['-v','-s','test12.py'])
  • 函数形参username,必须和参数化写的参数名字一致
  • 参数化类似个for循环,依次从参数列表中取出元素赋值个username变量
  • 列表数据格式还可以是元组,字典等类型,类型相同(不同也OK,不要自添烦恼)
@pytest.mark.parametrize("case",[(2,3,5),(21,31,52),(40,70,110)])
def test_add1(self,case):
    j=Count(case[0],case[1])
    assert j.add()==case[2]
@pytest.mark.parametrize("user",[{'name':'zhangsan'},{'password':123456}])
def test_register (user):
    Rsgister(user['name'], user['password'])

4,参数化-多个参数化

import pytest

@pytest.mark.parametrize("username",["张三","李四","王五"])
@pytest.mark.parametrize("password",["test1234","test5678","test9876"])
def test_login(username, password):
    print(f"登录用户名为 {username},密码{password}")
if __name__ == '__main__':
    pytest.main(['-v','-s','test14.py'])
  • 多个参数化时类似多层for循环,测试用例数回以相乘的方法增加,比如上面会有 3*3=9条测试结果

5,pytest测试报告

pytest.ini报告配置文件
  • 文件名称不能更改
  • 路径必须放在项目工程根目录下
  • 规则名称不能更改
  • 唯一能变的是规则值

Pytest基础使用
总结:pytest基本使用API表格

pytest对象方法pytesttest开头是用例assert 断言@pytest.mark,parameterize() [字符串、元组、字典]

Original: https://blog.csdn.net/weixin_44007111/article/details/124849035
Author: 小杜℃
Title: Pytest基础使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/773783/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球