python中unittest框架应用

1、Unittest为Python内嵌的测试框架,不需要特殊配置

2、编写规范

需要导入 import unittest

测试类必须继承unittest.TestCase

测试方法以 test_开头

模块和类名没有要求

TestCase 理解为写测试用例

TestSuite 理解为测试用例的集合

TestLoader 理解为的测试用例加载

TestRunner 执行测试用例,并输出报告

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

import unittest

from class_api_login_topup.demo import http_request

from class_api_login_topup.http_attr import Get_Attr  # 反射的值 获取 cookies

# 这是文件http_attr中的Get_Attr类

class Get_Attr:

    cookies = None

class Login_Http(unittest.TestCase):

    def __init__(self, methodName, url, data, method, expected):

        super(Login_Http, self).__init__(methodName)  # 超继承

        self.url = url

        self.data = data

        self.expected = expected

        self.method = method

    def test_api(self):  # 正常登录

        res = http_request().request(self.url, self.data, self.method, getattr(Get_Attr, 'cookies'))

        if res.cookies:

            setattr(Get_Attr, 'cookies', res.cookies)

        try:

            self.assertEqual(self.expected, res.json()['code'])

        except AssertionError as e:

            print("test_api's, error is {0}", format(e))

            raise e

        print(res.json())

if __name__ == '__main__':

    unittest.main()

执行一:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

import unittest

from class_demo_login_topup.http_tools import Login_Http

suite = unittest.TestSuite()

loader = unittest.TestLoader()

test_data = [{'url': 'http://test.lemonban.com/futureloan/mvc/api/member/login',

              'data': {'mobilephone': 'xxxx', 'pwd': '123456'}, 'expected': '10001', 'method': 'get'},

             {'url': 'http://test.lemonban.com/futureloan/mvc/api/member/login',

              'data': {'mobilephone': 'xxxx', 'pwd': '12345678'}, 'expected': '20111', 'method': 'get'},

             {'url': 'http://test.lemonban.com/futureloan/mvc/api/member/recharge',

              'data': {'mobilephone': 'xxxx', 'amount': '1000'}, 'expected': '10001', 'method': 'post'},

             {'url': 'http://test.lemonban.com/futureloan/mvc/api/member/recharge',

              'data': {'mobilephone': 'xxxx', 'amount': '-100'}, 'expected': '20117', 'method': 'post'}]

# 遍历数据,执行脚本 addTest 单个执行

for item in test_data:

    suite.addTest(Login_Http('test_api', item['url'], item['data'], item['method'], item['expected']))

#  执行

with open('http_TestCase.txt', 'w+', encoding='UTF-8') as file:

    runner = unittest.TextTestRunner(stream=file, verbosity=2)

    runner.run(suite)

# 运行结果

{'status': 1, 'code': '10001', 'data': None, 'msg': '登录成功'}

{'status': 0, 'code': '20111', 'data': None, 'msg': '用户名或密码错误'}

{'status': 1, 'code': '10001', 'data': {'id': 10011655, 'regname': '小蜜蜂', 'pwd': 'E10ADC3949BA59ABBE56E057F20F883E', 'mobilephone': 'xxxx', 'leaveamount': '150000.00', 'type': '1', 'regtime': '2021-07-14 14:54:08.0'}, 'msg': '充值成功'}

{'status': 0, 'code': '20117', 'data': None, 'msg': '请输入范围在0到50万之间的正数金额'}

执行二:把test_data的数据放在EXCEL中运行。

1

2

3

4

5

6

7

8

9

10

import unittest

from class_demo_login_topup.http_tools import Login_Http

suite = unittest.TestSuite()

loader = unittest.TestLoader()

test_data = HttpExcel('test_api.xlsx', 'python').real_excel()

for item in test_data:

    suite.addTest(Login_Http('test_api', item['url'], eval(item['data']), item['method'], str(item['expected'])))

with open('http_TestCase.txt', 'w+', encoding='UTF-8') as file:

    runner = unittest.TextTestRunner(stream=file, verbosity=2)

    runner.run(suite)  

执行三、直接用装饰器ddt

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

import unittest

from class_api_login_topup.demo import http_request

from class_api_login_topup.http_attr import Get_Attr  # 反射的值

from ddt import ddt, data, unpack

from class_demo_login_topup.http_excel import HttpExcel

test_data = HttpExcel('test_api.xlsx', 'python').real_excel()

@ddt

class Login_Http(unittest.TestCase):

    @data(*test_data)

    def test_api(self, item):  # 正常登录

        res = http_request().request(item['url'], eval(item['data']), item['method'], getattr(Get_Attr, 'cookies'))

        if res.cookies:

            setattr(Get_Attr, 'cookies', res.cookies)

        try:

            self.assertEqual(str(item['expected']), res.json()['code'])

        except AssertionError as e:

            print("test_api's, error is {0}", format(e))

            raise e

        print(res.json())

执行ddt方式一

1

2

3

4

5

6

7

8

9

10

import unittest

from class_demo_login_topup.http_tools import Login_Http

from class_demo_login_topup.http_excel import HttpExcel

suite = unittest.TestSuite()

loader = unittest.TestLoader()

from class_demo_login_topup import http_tools_1

suite.addTest(loader.loadTestsFromModule(http_tools_1))  # 执行整个文件

with open('http_TestCase.txt', 'w+', encoding='UTF-8') as file:

    runner = unittest.TextTestRunner(stream=file, verbosity=2)

    runner.run(suite)

执行ddt方式二

1

2

3

4

5

6

7

8

9

10

import unittest

from class_demo_login_topup.http_tools import Login_Http  # 不用ddt的方法

from class_demo_login_topup.http_excel import HttpExcel

suite = unittest.TestSuite()

loader = unittest.TestLoader()

from class_demo_login_topup.http_tools_1 import * # http_tools_1文件是用ddt的方法

suite.addTest(loader.loadTestsFromTestCase(Login_Http))  # 执行http_tools_1 文件下的Login_Http类,按照类执行

with open('http_TestCase.txt', 'w+', encoding='UTF-8') as file:

    runner = unittest.TextTestRunner(stream=file, verbosity=2)

    runner.run(suite)

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

相关推荐

  1. python&UnitTest框架

    2024-07-10 17:02:04       48 阅读
  2. Python】单元测试unittest框架

    2024-07-10 17:02:04       48 阅读
  3. Python自动化测试:unittest与pytest框架

    2024-07-10 17:02:04       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 17:02:04       5 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 17:02:04       5 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 17:02:04       4 阅读
  4. Python语言-面向对象

    2024-07-10 17:02:04       5 阅读

热门阅读

  1. HarmonyOS应用开发前景及使用工具

    2024-07-10 17:02:04       7 阅读
  2. JVM的基础介绍(1)

    2024-07-10 17:02:04       9 阅读
  3. 开源项目编译harbor arm架构的包 —— 筑梦之路

    2024-07-10 17:02:04       13 阅读
  4. 用户特征和embedding层做Concatenation

    2024-07-10 17:02:04       12 阅读