• python之unittest单元测试


    现有一个自行封装的http_requests模块,用于测试http请求,内容如下:

    import requests
    
    class HttpRequests:
    
        def __init__(self,url,para):
            self.url = url
            self.para = para
    
        def http_requests(self,method):
            try:
                if method.lower() == 'get':
                    response = requests.get(self.url,params=self.para)
                    return response
                elif method.lower() == 'post':
                    response = requests.post(self.url,data=self.para)
                    return response
                elif method.lower() == 'delete':
                    response = requests.delete(self.url,data=self.para)
                    return response
            except Exception as e:
                print('请求错误:',e)
    

    怎样利用python的unittest单元测试对其进行场景覆盖测试呢?

    首先明确一下unittest单元测试步骤:

    引入unittest模块,unittest模块包括了TestCase--测试用例、TestSuite--测试套、TestLoader--加载器、TextTestRunner--执行测试用例、TextTestResult--测试结果等

    --> 创建一个测试类,继承unittest.TestCase类,用于写测试用例

    --> 在测试类里定义测试方法,以 test 开头。每一条用例对应一个方法

    --> 创建测试套,用于存储测试用例

    --> 向测试套里添加测试用例

    --> 执行测试用例并生成测试报告

    下面一步一步来:

    1.引入unittest模块,新建test_reuqests.py文件,一句搞定 import unittest

    2.创建测试类,定义测试方法

    测试方法就是测试用例,包括预期结果、实际结果,以及预期结果和实际结果的比对结果判断用例是否执行通过

    断言:预期结果和实际结果比较,并判断实际结果是否符合预期的过程就是断言

    常见的断言方法有:

    这里用assertIn的方法,判断预期的字符串是否包含于实际的响应报文中

    import unittest

    # 引入http_requests模块的httprequests方法 from .http_requests import HttpRequests # 创建测试类 class TestRequests(unittest.TestCase): # 创建测试用例,以test开头 def test_001(self): '''get方法,用户名/密码正确''' res = HttpRequests('http:/xx.xx.xx.xx:xx/xxx/login', {'mobilephone':'186********','pwd':'123456'}).http_requests('get') self.assertIn('登录成功',res.text) def test_002(self): '''get方法,密码为空''' res = HttpRequests('http://xx.xx.xx.xx:xx/xxx/login', {'mobilephone':'186********','pwd':''}).http_requests('post') self.assertIn('密码不能为空',res.text)

    如上代码创建了测试类TestRequests,并新建了两条测试用例,分别测试用户名密码正确 和 密码为空的情况,还可以新建更多场景的测试用例,和功能测试用例功能点是一样的。

    3.创建测试套,并向测试套中添加测试用例

    import unittest
    from .test_requests import *
    
    # 创建测试用例容器suite
    suite = unittest.TestSuite()
    

    向测试套中添加测试用例有三种方法:

    a.直接用addTest加载测试用例

    # 增加每一条用例:测试类类名(测试方法名)
    suite.addTest(TestRequests('test_001'))
    suite.addTest(TestRequests('test_002'))

    这种方法需要一条一条用例添加,有几条就需要添加几次。

    b.通过TestLoader加载测试用例

    loader = unittest.TestLoader()

    b方法里面又分两种方法:

    b1.通过测试类加载测试用例

    # 通过测试类加载测试用例 loadTestsFromTestCase
    suite.addTest(loader.loadTestsFromTestCase(TestRequests))
    

    这种方法添加某个测试类,会将该测试类里面的测试方法都添加进来,有几个测试类就需要添加几次。

    b2.通过测试类所在模块加载测试用例

    # 通过测试类所在模块加载测试用例 loadTestsFromModule
    # 需要引入测试类模块
    from .xx import test_requests
    suite.addTest(loader.loadTestsFromModule(test_requests))
    

     这种方法最简便,添加测试模块,会把该测试模块里的所有测试类测试方法都添加进来。因此是最常用的。

    4.执行测试用例,并生成测试报告

    有两种方法:

    a.python里unittest单元测试框架提供了生成txt格式的测试报告方法,可以保存到txt文件里

    with open('Test_http_requests.txt','w',encoding='utf-8') as file:
        runner = unittest.TextTestRunner(stream=file,verbosity=2)   #verbosity表示报告详细情况,0-2,2最详细
        runner.run(suite)
    

    这种方法比较简单,只是生成txt格式的报告不是很美观,可读性也不是很强

    b.这里我们从github上下载一个HTMLTestRunner模块,重新命名为HTMLTestRunnerNew,并存放在python的lib目录下。

    import HTMLTestRunnerNew
    with open('Test_http_requests.html','wb+') as file:
        runner = HTMLTestRunnerNew.HTMLTestRunner(file,title='http_request测试报告',description='我是描述',tester='南山之喃')
        runner.run(suite)
    

     把上面步骤3和4整合一下,加载用例采用最常用的通过测试模块加载用例的方法,完整代码如下:

    import unittest
    from .test_requests import *
    
    # 创建测试用例容器suite
    suite = unittest.TestSuite()
    
    # addTest加载测试用例
    # 通过测试类所在模块加载测试用例 loadTestsFromModule -- 最常用
    # 需要引入测试类模块
    from .xx import test_requests
    suite.addTest(loader.loadTestsFromModule(test_requests))
    
    
    # 执行测试用例并生成测试报告
    import HTMLTestRunnerNew
    with open('Test_http_requests.html','wb+') as file:
        runner = HTMLTestRunnerNew.HTMLTestRunner(file,title='http_request测试报告',description='我是描述',tester='南山之喃')
        runner.run(suite)
    

     执行如下代码,就会生成名为 http_request测试报告 的html格式测试报告啦,可以在浏览器里预览噢~

    是不是还是挺好看滴~

  • 相关阅读:
    Office2003中文绿色免安装版本(wordExcelPowerPoint三合一)
    图片去背景神奇网站remove.bg
    网络视频下载分享
    Windows10手机投屏到电脑
    测试开发工程必备技能之一:Mock的使用
    实战教程:如何将自己的Python包发布到PyPI上
    Sysbench测试神器:一条命令生成百万级测试数据
    Java 获取PDF中的数字签名信息
    Java 在Excel中添加分离型饼图、环形图
    C#/VB.NET 添加、删除PPT幻灯片中的数字签名
  • 原文地址:https://www.cnblogs.com/Dahlia/p/10586120.html
Copyright © 2020-2023  润新知