整个流程:

使用HTMLTestRunner的Run方法执行用例,用例调用Excel读取方法,将测试数据导入到unittest用例中执行,测试结果返回给HTMLTestRunner。

因为刚接触接口自动化,写的比较简单。后面也会考虑加一个请求类型的封装,excel测试数据也会增加一些字段(如用例是否运行,是否带Headers、cookie,

case依赖,关联数据库,增加日志,定制化HTML,测试结果自动发送邮件等),搞完后再分享出来。

整个目录结构:

---common 存放公共库

---testcase

---testdata 存放excel测试数据

---testreport 存放测试报告

---Run_tests 启动测试

1. Run_tests.py

使用discover方法构造测试集,用HTMLTestRunner的run()方法启动测试集并生成测试报告。

import time, sys
sys.path.append('./testcase')
sys.path.append('./common')
from HTMLTestRunner import HTMLTestRunner
from unittest import defaultTestLoader # 指定测试用例为当前文件夹下的 testcase 目录
test_dir = './testcase'
testsuit = defaultTestLoader.discover(test_dir, pattern='*_test.py') if __name__ == "__main__": now = time.strftime("%Y-%m-%d %H_%M_%S")
filename = './testreport/' + now + '_result.html'
fp = open(filename, 'wb')
runner = HTMLTestRunner(stream=fp,
title='System Interface Auto Test Report',
description='Test Result')
runner.run(testsuit)
fp.close()

  

2. 测试Excel档如下:

使用公共库中的OperateExcel方法读取,通过excel名和sheet名返回测试数据的列表集合。

def Readexcelrow_of_sheet(filename,sheet_name,row):
'''返回某个sheet中某一行数据的列表'''
folder = "C:\\Users\\LENOVO\\PycharmProjects\\Apiautotest-master\\testdata\\"
fullfilename = folder + filename
rb = xlrd.open_workbook(fullfilename)
sheet = rb.sheet_by_name(sheet_name)
datalist = []
for i in range(8):
try:
data = sheet.cell_value(row,i)
datalist.append(data)
except TypeError as f:
break
#print (datalist)
return datalist def Readexcelalldata_of_sheet(filename,sheet_name):
'''返回整个sheet的内容的列表'''
datalistlist =[]
for i in range(1,100):
try:
data = Readexcelrow_of_sheet(filename,sheet_name,i)
datalistlist.append(data)
except IndexError as e:
break
return datalistlist

  

3. testcase调用该方法读取测试数据后,取出测试数据循环进行request测试,对测试结果进行断言

    def test_login(self):
self.testcasecount = len(self.testcaseinfo)
for i in range(len(self.testcaseinfo)):
data = self.testcaseinfo[i]
#print (data)
url = data[3]
payload = data[4].encode('utf-8')
expectedcode = data[5]
expectedmsg = data[6]
expecteddata = data[7]
headers= {"Content-Type": "application/json"}
r = requests.post(url,data=payload,headers=headers)
self.result = r.json()
self.assertEqual(self.result['code'], expectedcode,msg="code断言失败")
self.assertEqual(self.result['msg'], expectedmsg,msg="msg断言失败")
if expecteddata != "":
print ("检查data字段")
self.assertEqual(str(self.result['data']), expecteddata,msg="data断言失败")

 

4.测试完成后生成测试报告,报告中可以体现出测试异常的原因。

目前还有个问题:

unittest中实际运行了一个借口的很多条用例,而报告中只会有一条记录。这是因为unittest test case中我只写了一个test方法,循环测试数据。这样写用例更简单,目前在想是从报告中处理,还是测试用例读取部分进行处理。

有想法欢迎给我留言,谢谢。

 

Python+Excel+Unittest+HTMLTestRunner实现数据驱动接口自动化测试(一)的更多相关文章

  1. Python+Excel+Unittest+HTMLTestRunner实现数据驱动接口自动化测试(二)

    因为小白,这2天研究了好久才算是搞好.先附上一个测试完成后邮件的截图: 上一篇有提到: unittest中实际运行了一个接口的很多条用例,而报告中只会有一条记录.这是因为unittest test c ...

  2. 接口自动化 基于python实现的http+json协议接口自动化测试框架源码(实用改进版)

    基于python实现的http+json协议接口自动化测试框架(实用改进版)   by:授客 QQ:1033553122 欢迎加入软件性能测试交流QQ群:7156436     目录 1.      ...

  3. python+unittest+requests+HTMLRunner编写接口自动化测试集

    问题描述:搭建接口测试框架,执行用例请求多个不同请求方式的接口 实现步骤: ① 创建配置文件config.ini,写入部分公用参数,如接口的基本url.测试报告文件路径.测试数据文件路径等配置项 [D ...

  4. Python+Selenium+Unittest+HTMLTestRunner生成测试报告+发送至邮箱,记一次完整的cnblog登录测试示例,

    测试思路:单个测试集.单个测试汇成多个测试集.运行测试集.生成测试报告.发送至邮箱. 第一步:建立单个测试集,以cnblog登录为例. 测试用例: cnblog的登录测试,简单分下面几种情况:(1)用 ...

  5. Python 基于python实现的http+json协议接口自动化测试框架源码(实用改进版)

    目录 1.      写在前面 2.      开发环境 3.      大致流程 4.      框架简介 5.      运行结果展示 6.      文件与配置 7.      测试接口实例 n ...

  6. Python Selenium unittest+HTMLTestRunner实现 自动化测试及发送测试报告邮件

    1.UI测试框架搭建-目录结构 2. 文件介绍 2.1.baseinfo->__init__.py 配置文件定义基础参数 #-*-coding:utf-8-*- #测试用例配置参数 base_u ...

  7. python用unittest+HTMLTestRunner+csv的框架测试并生成测试报告

    直接贴代码: import csv  # 导入scv库,可以读取csv文件from selenium import webdriverimport unittestfrom time import s ...

  8. python用unittest+HTMLTestRunner的框架测试并生成测试报告

    直接贴代码: import unittestfrom selenium import webdriverfrom time import sleepimport osimport time # 定义打 ...

  9. python+request+unittest+HTMLTestRunner

    https://www.imooc.com/article/details/id/20813 https://www.cnblogs.com/fennudexiaoniao/p/7771931.htm ...

随机推荐

  1. python学习Day1 计算机原理编程思维

    一.学习思想:3W+1H   学什么(what).为什么学(why).用在哪里(where).怎么用(how) 学习编程语言重在代码量.代码量.代码量! 二.计算机五大组成部分,三大核心: 五大组成部 ...

  2. 写出良好风格的JS、CSS代码

    现在代码的格式都有 eslint.prettier.babel 这些来保证,但是技术手段再高端都不能解决代码可读性的问题. 因为这个只有个人才能解决.但是注意一下事项,可以显著提高代码的可读性.可识别 ...

  3. ES6 let const 声明变量 块级作用域

    ES6 中除了使用 var 定义变量,还有let.const,定义变量. function getValue(condition){ console.log(typeof value2); // un ...

  4. Pandas排列和随机采样

    随机重排序 import pandas as pd import numpy as np from pandas import Series df = pd.DataFrame(np.arange(5 ...

  5. RESTful API格式 图片验证码接口

    之前公司写图片验证码时用的是session 后来写接口时也想用session存验证码  不过领导说RESTful API 写接口 没有session这一说 于是就用了redis 存验证码 还有就是接口 ...

  6. 22. Generate Parentheses产生所有匹配括号的方案

    [抄题]: Given n pairs of parentheses, write a function to generate all combinations of well-formed par ...

  7. 拿来主义:treeview插件父子节点问题

    鄙人公司没有专门的前端,所以项目开发中都是前后端一起抡.最近用bootstrap用的比较频繁,发现bootstrap除了框架本身的样式组件外,还提供了多种插件供开发者选择.本篇博文讲的就是bootst ...

  8. centos 7 安装redis 3.2.1

    https://www.cnblogs.com/zuidongfeng/p/8032505.html 下载安装包: http://download.redis.io/releases/ 根据需要自己选 ...

  9. redis持久化详述

    本来打算根据自己搜索的一些文章写些总结,后来发现了一篇好文,这里转载下,在自己博客里面记录下. 原文链接:https://www.cnblogs.com/kismetv/p/9137897.html ...

  10. [Hadoop]Hadoop章1 Hadoop原理解析

    Hadoop是Apache软件基金会所开发的并行计算框架与分布式文件系统.最核心的模块包括Hadoop Common.HDFS与MapReduce. HDFS HDFS是Hadoop分布式文件系统(H ...