python中unittest框架应用详解

作者:小木可菜鸟测试一枚 时间:2023-05-26 14:27:42 

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

  • 2、编写规范

  • 总结

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

2、编写规范

需要导入 import unittest

测试类必须继承unittest.TestCase

测试方法以 test_开头

模块和类名没有要求

TestCase 理解为写测试用例

TestSuite 理解为测试用例的集合

TestLoader 理解为的测试用例加载

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


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()

执行一:


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中运行。


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


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方式一


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方式二


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)

来源:https://blog.csdn.net/m0_51709670/article/details/120335995

标签:python,unittest,框架
0
投稿

猜你喜欢

  • 解决Pycharm运行时找不到文件的问题

    2023-06-15 00:26:39
  • Python网络编程之ZeroMQ知识总结

    2022-07-06 20:16:25
  • 浅谈python输出列表元素的所有排列形式

    2023-02-10 11:09:39
  • 简单方法实现Vue 无限滚动组件示例

    2023-07-02 16:50:14
  • python实现同时给多个变量赋值的方法

    2021-10-09 07:02:50
  • 使用mybatis框架连接mysql数据库的超详细步骤

    2024-01-13 06:12:08
  • Python+matplotlib+numpy实现在不同平面的二维条形图

    2023-11-11 21:01:58
  • 通过Python实现控制手机详解

    2021-04-21 12:10:37
  • python基础之reverse和reversed函数的介绍及使用

    2022-10-19 19:12:18
  • 用Python写个新年贺卡生成器

    2023-08-26 00:56:45
  • Go语言sort包函数使用示例

    2023-10-15 03:29:59
  • 利用pygame完成动画精灵和碰撞检测

    2022-05-06 22:53:26
  • Python 26进制计算实现方法

    2022-12-09 03:26:36
  • Java读取文件及基于正则表达式的获取电话号码功能详解

    2022-06-18 09:11:45
  • OverFlow:一个秘密武器

    2011-02-26 15:41:00
  • (100-1)% 的内容是导航

    2008-01-11 19:23:00
  • pandas读取csv文件,分隔符参数sep的实例

    2021-05-03 11:38:58
  • 在 CSS 中关于字体处理效果的思考

    2008-04-25 22:57:00
  • 基于MySql的扩展功能生成全局ID

    2024-01-13 07:52:58
  • Django 开发调试工具 Django-debug-toolbar使用详解

    2022-03-18 02:31:07
  • asp之家 网络编程 m.aspxhome.com