python 接口自动化的一些容易忘记的知识点,先做个笔记

2022-11-18  吴水荣 

1、python读取csv文件

import pandas
csvfiles = pandas.read_csv(“1.csv”,encoding=”gbk”) #默认是用utf-8,有中文的时候往往是gbk
print(csvfiles)

2、unittest的方法执行顺序:
单元测试方法的命名,除了命名规则之外还需要注意执行顺序,先数字后字母。因此如果是做场景测试,比如先注册再登录,但是注册的方法是test_register(self),而登录的方法是test_login(self)的话,l在r的前面,它会先跑登录再跑注册,就会失败,因此最好的方法是在方法里加上数字:test_1_register(self),test_2_login(self)这样。但是如果是test_9_register和test_10_login的话,仍然是登录先执行,因为对比的是9和1

3、Pytest 规则
“””
1、模块名以 test_ 开头命名,如:test_login.py
2、如果模块中有类,类名称必须是Test开头
3、函数必须是test开头
“””

import pytest
import requests
from loguru import logger
class TestPersonalMod:
    def test_register(self):
        url = r"http://127.0.0.1:8081/api/example/register"
        request_params = {
            "phoneNumber": "13401345600",
            "passWord": "Wusr@12345"
        }
        request_data = requests.post(url=url, json=request_params)
        logger.info("注册接口入参:" + str(request_params))
        response_data = request_data.json()
        logger.info("注册接口出参:" + str(response_data))
        if response_data["errno"] == 0:
            logger.info("注册接口成功")
        else:
            logger.error("注册接口失败,手机号重复")
        assert response_data["errno"] == 104
if __name__ == '__main__':
    pytest.main()

执行结果
========================= 1 passed in 0.25s ==============================

Process finished with exit code 0
PASSED                 [100%]2022-11-10 22:42:34.234 | INFO     | testcase.test_numberone:test_register:18 - 注册接口入参:{'phoneNumber': '13401345600', 'passWord': 'Wusr@12345'}
2022-11-10 22:42:34.235 | INFO     | testcase.test_numberone:test_register:20 - 注册接口出参:{'errno': 104, 'errmsg': '该手机号码已被注册'}
2022-11-10 22:42:34.235 | ERROR    | testcase.test_numberone:test_register:24 - 注册接口失败,手机号重复

4、一个函数如何实现参数化,执行多个测试用例(一个函数只能有一个断言)——这种方法不常用,可以写两个函数来实现

在函数上加上一个修饰符@pytest.mark.parametrize,然后传入三组参数:第一组是形参命名,第二组放用例列表,第三组传函数名称别名,然后再执行。

 import pytest
    from testcase.calc import Calc
    class TestParameter:
        """
        通过参数化实现一个方法执行多条测试用例
        """
        @pytest.mark.parametrize("a,b,c", [(1, 2, 3), (2, 2, 5)], ids=["test_add1", "test_add2"])
        def test_add(self, a, b, c):
            """
            测试a+b 是否等于c
            第一组数据:形参命名
            第二组数据(列表:用例):[(1,1,2),(2,2,5)]--->两组用例,一组成功,一组失败
            第三组数据(列表:函数别名):["函数别名1","函数别名2"]
            :param a:
            :param b:
            :param c:
            :return:
            """
            cal = Calc()
            assert c == cal.add(a, b)
    if __name__ == '__main__':
        pytest.main()
    执行结果  说明哪个用例通过哪个没通过,为啥没通过
    ===================== test session starts =============================
    collecting ... collected 2 items

    test_parameter.py::TestParameter::test_add[test_add1] PASSED         [ 50%]
    test_parameter.py::TestParameter::test_add[test_add2] FAILED         [100%]
    test_parameter.py:10 (TestParameter.test_add[test_add2])            5 != 4

    Expected :4
    Actual   :5
    <Click to see difference>

    self = <testcase.test_parameter.TestParameter object at 0x0000023E13E6E438>
    a = 2, b = 2, c = 5

        @pytest.mark.parametrize("a,b,c", [(1, 2, 3), (2, 2, 5)], ids=["test_add1", "test_add2"])
        def test_add(self, a, b, c):
            """
            测试a+b 是否等于c
            第一组数据:形参命名
            第二组数据(列表:用例):[(1,1,2),(2,2,5)]--->两组用例,一组成功,一组失败
            第三组数据(列表:函数别名):["函数别名1","函数别名2"]
            :param a:
            :param b:
            :param c:
            :return:
            """
            cal = Calc()
    >       assert c == cal.add(a, b)
    E       assert 5 == 4
    test_parameter.py:24: AssertionError
83°/838 人阅读/0 条评论 发表评论

登录 后发表评论