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

python接口自动化:requests+ddt+htmltestrunner数据驱动框架的更多相关文章

  1. python接口自动化之用HTMLTestRunner生成html测试报告

    [第一步]:引入HTMLTestRunner包 1.下载HTMLTestRunner,下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html ...

  2. 【python接口自动化】- DDT数据驱动测试

    简单介绍 ​ DDT(Date Driver Test),所谓数据驱动测试,简单来说就是由数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变.通过使用数据驱动测试的方法,可以在需要验证多组数据 ...

  3. 【python接口自动化-requests库】【三】优化重构requests方法

    一.重构post请求方法 上一张讲了如何使用requests库发送post请求,但是有时候,我们写脚本,不可能这么简单,代码完全不可复用,重复工作,那我们是不是可以想象,把我们的get,post请求, ...

  4. 【python接口自动化-requests库】【二】requests库简单使用(入门)

    一.post请求 前面讲了,我们get请求的时候,引入requests的包,然后直接使用get方法,那么post是不是一样的? 1.首先我们先引入requests import requests 2. ...

  5. 【python接口自动化-requests库】【一】requests库安装

    1.概念 requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库.它比 urllib 更加方便,可以节约我们大量的工作,完全满 ...

  6. Python接口自动化--requests 2

    # _*_ encoding:utf-8 _*_ import json import requests #post请求 payload = {"cindy":"hell ...

  7. Python接口自动化--requests 1

    # _*_ encoding:utf-8 _*_ import requests #请求博客园首页,无参数的get请求 r = requests.get('http://www.cnblogs.com ...

  8. python接口自动化28-requests-html爬虫框架

    前言 requests库的好,只有用过的人才知道,最近这个库的作者又出了一个好用的爬虫框架requests-html.之前解析html页面用过了lxml和bs4, requests-html集成了一些 ...

  9. python接口自动化24-有token的接口项目使用unittest框架设计

    获取token 在做接口自动化的时候,经常会遇到多个用例需要用同一个参数token,并且这些测试用例跨.py脚本了. 一般token只需要获取一次就行了,然后其它使用unittest框架的测试用例全部 ...

随机推荐

  1. 【模板】Lucas定理

    代码如下 #include <bits/stdc++.h> using namespace std; typedef long long LL; const int maxn=1e5+10 ...

  2. gdb命令小结

    GDB命令小结 gdb <filename> : 调试指定程序文件 r : run 的简写,运行被调试程序, 如果此前没有下过断点,则执行完整个程序:如果有断点, 则程序暂停在第一个可用断 ...

  3. 浅谈javaScript中的继承关系<一>

    // JavaScript Document //创建三个构造函数 function Shape(){ this.name='ahape'; this.toString=function(){retu ...

  4. python 字符词串和字符串的转换

    type(' i am ') str type(''.join('i am')) str ''.join('sda sadaa') 'sda sadaa' q=str('i am the teache ...

  5. C++调试的骚操作

    打LCT时突然发现的骚操作 举个栗子 正常调试下应该是这样的 然后用光标选中函数名时-- 可以发现函数被运行了一次(每选中一次都会运行) 然而当函数带了变量时就布星了

  6. python1--比较三个数值的大小

    num1 = input("num1:")num2 = input("num2:")num3 = input("num3:")num = m ...

  7. aspose 模板输出

    Dictionary<string, string> dictionnaryBig = new Dictionary<string, string>(); dictionnar ...

  8. 容器————map

    序列容器是管理数据的宝贵工具,但对大多数应用程序而言,序列容器不提供方便的数据访问机制.一种典型的方法是通过名称来寻找地址.如果记录保存在序列容器中,就只能通过搜索得到这些数据.相比而言,map 容器 ...

  9. Linux系统安装时分区的介绍

    一般来说,在linux系统中都有最少两个挂载点,分别是/ (根目录)及 swap(交换分区),其中,/ 是必须的: 建议挂载的几大目录: /-------根目录,唯一必须挂载的目录.不要有任何的犹豫, ...

  10. 3D Computer Grapihcs Using OpenGL - 17 添加相机(旋转)

    在11节我们说过,MVP矩阵中目前只应用了两个矩阵,World to View 矩阵被省略了,这就导致我们的画面没有办法转换视角. 本节我们将添加这一环节,让相机可以旋转. 为了实现这一目的,我们添加 ...