• python接口自动化:requests+ddt+htmltestrunner数据驱动框架


    一、xc_datas:存放数据,xc_report:存放生成的报告,xc_tools:存放一些工具,get_api.py为执行程序

      

     二、执行程序的实现代码如下:

    #无token情况下,只支持get、post请求
    import unittest
    from HTMLTestRunner import HTMLTestRunner
    from ddt import ddt,data
    from xctest_api.xc_tools.get_CutString import *
    from xctest_api.xc_tools.get_ReadExcel import *
    import requests
    import time
    
    @ddt
    class get_apitest(unittest.TestCase):
        @classmethod
        def setUpClass(cls):
            print('测试开始')
            cls.s=requests.session()
        @classmethod
        def tearDownClass(cls):
            print('测试结束')
        def test_login(self):
            lo=ReadExcel().read_excel('./xc_datas/login_data.xlsx')
            if lo[3] == 'post':
                result = self.s.post(lo[2], get_string().cut_string(lo[5]))
                self.assert_login(lo[8],result.text)
            elif lo[3]=='get':
                result = self.s.get(lo[2])
                self.assert_login(lo[8], result.text)
            else:
                print('暂无此请求类型方法')
        @data(*ReadExcel().read_excel('./xc_datas/api_data.xlsx'))
        def test_start(self, li):
            if li[3] == 'post':
                self.post_requests(li[4],li)
            elif li[3] == 'get':
                result = self.s.get(li[2])
                self.assertIn(li[8], result.text)
            else:
                print('暂无此请求类型方法')
        def assert_login(self,a,b):
            if a in b.text:
                print('登录成功')
            else:
                print('登录失败')
    
        def post_requests(self,c,li):
            if c == 'application/x-www-form-urlencode':
                result = self.s.post(li[2], get_string().cut_string(li[5]))
                self.assertIn(li[8], result.text)
            elif c == 'application/json':
                result = self.s.post(li[2], json=get_string().cut_string(li[5]))
                self.assertIn(li[8], result.text)
            elif c == 'text/xml':
                result = self.s.post(li[2], get_string().cut_string(li[5]).encode('utf-8'))
                self.assertIn(li[8], result.text)
            elif c == 'multipart/form-data':
                if li[6]=='':
                    result = self.s.post(li[2],get_string().cut_string(li[5]))
                    self.assertIn(li[8], result.text)
                else:
                    result = self.s.post(li[2], get_string().cut_string(li[5]),files=li[6])
                    self.assertIn(li[8], result.text)
            else:
                print('暂无此数据类型方法')
    
    if __name__ == '__main__':
        suite = unittest.TestSuite()
        suite.addTests(unittest.TestLoader().loadTestsFromTestCase(get_apitest))
        name=time.strftime('%Y%m%d%H%M%S')
        f = open('./xc_report/%d.html'%name, 'wb')
        r = HTMLTestRunner(stream=f, title=u'EMS1.5', description=u'测试报告')
        r.run(suite)
        f.close()
  • 相关阅读:
    在spring中该如何使用DTO,以及DTO和Entity的关系
    AngularJs踩过的坑
    springMVC正确使用GET POST PUT和DELETE方法,如何传递参数
    Mac下使用终端连接远程使用ssh协议的git服务器
    springMVC的异常处理
    根据业务规则分析业务对象,然后生成表结构
    在线资源--图片/json等
    js中的Hook
    diamond源码阅读-目录监控
    maven常用命令
  • 原文地址:https://www.cnblogs.com/badbadboyyx/p/12013358.html
Copyright © 2020-2023  润新知