前言

大家在接口测试的过程中,很多时候会用到对CSV的读取操作,本文主要说明Python3对CSV的写入和读取。下面话不多说了,来一起看看详细的介绍吧。

1、需求

某API,GET方法,token,mobile,email三个参数

token为必填项

mobile,email 必填其中1项

mobile为手机号,email为email格式

2、方案

针对上面的API,在做接口测试时,需要的测试用例动辄会多达10+, 这个时候采用数据驱动的方式将共性的内容写入配置文件或许会更合适。

这里考虑把API、参数、以及预期结果预行在格式化的CSV里保存,利用csv组件从CSV里读取URL、参数以及预期结果,Requests组件发起请求,将响应结果与预期结果进行比对,最后把比对结果写到结果CSV。

流程如下图 ☟

3、实现

1、在上代码之前,先安装好如下几个组件:

csv 读写CSV文件

json

requests 发起请求,获取响应结果

unittest 测试用例调度

2、data.csv(本示例选取部分用例)

3、reader_CSV函数代码示例

import csv

import json

import requests

import time

import unittest

def readCSV(self,filename):

'''

:param filename: 需要读取的数据文件

:return: [{data1},{data2}...]

'''

datas = []

try:

#以DictReader的方式读取数据文件,方便与json互做转换

with open(filename,'r') as csvfile :

#从文件里读取到的数据转换成字典列表的格式

reader = csv.DictReader(csvfile)

for row in reader:

data = {}

data['id'] = row['id']

data['url'] = row['url']

data['token'] = str(row['token'])

data['mobile'] = row['mobile']

data['email'] = row['email']

data['expect'] = json.dumps(row['expect']) \

if isinstance(row['expect'],dict) \

else row['expect'] #如果expect读取出来的不是json则取其原值,否则转为json格式保存到result里

datas.append(data)

return datas

#如果文件找不到,返回空的datas

except FileNotFoundError:

print("文件不存在",filename)

return datas

4、request_URL函数示例(包含GET请求和POST请求2个方法)

def get_request(self,url,params):

'''

通用的调用GET接口方法

:param url:string 接口路径

:param params:{"":"","":""} 需要传入的参数

:return: response响应体

'''

print("调用API...")

r = requests.get(url,params=params)

print(r.text)

return r

def post_request(self,url,params):

'''

通用的调用POST接口方法

:param url: string 接口路径

:param params: {"":"","":""} 需要传入的参数

:return:response响应体

'''

print("调用API...")

r = requests.post(url,params=json.dumps(params)) #post的方法必须用json.dumps()转化成json格式

print(r.text)

return r

5、assert_Result函数示例

def assertResult(self,except_value,real_value):

'''

校验样本字符串中是否包含指定字符串

:param except_value: string 指定字符串

:param real_value: string 样本字符串

:return: Boolean 样本中包含指定字符串返回True,否则返回False

'''

ifsuccess = except_value in str(real_value)

return ifsuccess

6、write_CSV函数示例

def writeCSV(self,filename,results):

'''

写入csv文件指定内容

:param filename: string 需要写入的文件名称

:param results: [{data1},{data2},...] 写入的内容

:return: 无

'''

print("写文件:",filename)

#以DictWriter的方式写文件

with open(filename,'w+') as csvfile:

headers="id,url,token,mobile,email,expect,real_value,assert_value".split(",")

writer = csv.DictWriter(csvfile,fieldnames=headers)

#写表头

writer.writeheader()

#写数据

if results.__len__() > 0 :

for result in results:

writer.writerow(result)

csvfile.close()

7、test_interface1函数示例

def test_interface1(self):

#指定读取的数据文件名称

data_file = "../data/data.csv"

#指定最终结果生成的数据文件名称

result_file = "../data/result_{}.csv".format(str(time.time()).split(".")[0])

#读取指定文件的数据

datas = self.readCSV(data_file)

#数据文件有内容则调用接口,否则直接测试结束

if datas.__len__() > 0:

results =[]

#获取数据文件里的每一行

for testcase in datas :

result = {}

result["id"] = testcase["id"]

result["url"] = testcase["url"]

result["token"] = testcase["token"]

result["mobile"] = testcase["mobile"]

result["email"] = testcase["email"]

result["expect"] = testcase["expect"]

#组装参数

params = {

"token":result["token"],

"mobile":result["mobile"],

"email":result["email"]

}

#调用API接口,获取响应结果

real_value = self.get_request(result["url"],params)

#调用assert方法,检查预期结果是否在响应结果中存在

assert_value = self.assertResult(result["expect"],real_value.text)

result["real_value"] = real_value.text

result["assert_value"] = assert_value

#获取每一行里的所有字段以及实际结果和验证结果

results.append(result)

#执行完所有记录后,将所有结果写入result.csv

self.writeCSV(result_file,results) #写入csv文件

print("测试结束")

8、result_1523956055.csv(本示例中的测试结果请忽略)

总结

python封装了很多方法,对于测试来说开发速度相对较快,接口自动化测试如果采用CSV管理的数据驱动方式,使用csv+requests是测试开发不容错过的利器之一。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

本文标题: 利用Python如何实现数据驱动的接口自动化测试

本文地址: http://www.cppcns.com/jiaoben/python/227724.html

python中什么是数据驱动_利用Python如何实现数据驱动的接口自动化测试相关推荐

  1. python中的utils模块_利用 Python 的 package 机制简化 utils 包设计

    package 机制 对于 package 机制的说明,其实官方文档已经有非常详尽的论述了,本文并不着眼于此. 简单来说,一个目录下如果包含 __init__.py ,则被 Python 视作一个 P ...

  2. python中的递归思想_〖Python〗-- 递归、面向对象初识及编程思想

    [递归.面向对象初识及编程思想] 一.递归 1.定义: 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. (1)递归就是在过程或函数里调用自身: (2)在使用递归策 ...

  3. python自动化测试数据驱动_利用Python如何实现数据驱动的接口自动化测试

    大家在接口测试的过程中,很多时候会用到对CSV的读取操作,本文主要说明Python3对CSV的写入和读取.下面话不多说了,来一起看看详细的介绍吧. 1.需求 某API,GET方法,token,mobi ...

  4. python对excel数据更改_利用python对excel中一列的时间数据更改格式代码示例

    本篇文章小编给大家分享一下利用python对excel中一列的时间数据更改格式代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 问题场景:需要将 ...

  5. 利用python从网页查找数据_利用Python模拟淘宝的搜索过程并对数据进行可视化分析...

    数据挖掘入门与实战 公众号: datadw 本文讲述如何利用Python模拟淘宝的搜索过程并对搜索结果进行初步的数据可视化分析. 搜索过程的模拟:淘宝的搜索页面有两种形式, 一种形式是, 2019/2 ...

  6. python怎么去掉视频字幕_利用Python实现字幕挂载(把字幕文件与视频合并)思路详解...

    其实超简单超简单!python好现成的库,一下子省略了好多步骤! 本文在Windows环境下!linux只是不需要手动输入imagicmagick的位置! 需要用到的环境 python(基本上只要不是 ...

  7. python制作心形照片墙_利用python生成照片墙的示例代码

    PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了.其官方主页为:PIL. PIL历 ...

  8. python用渐变色画圆_利用python控制Autocad:pyautocad方式

    发现pyautocad模块:可以用python控制autocad的包.今天把文档中的重点内容摘录出来,以后绘图.计算大工程量.或者识别施工图的时候时候也许可以用到. 一.连接cad pyautocad ...

  9. python爬去百度文库_利用Python语言轻松爬取数据[精品文档]

    利用 Python 语言轻松爬取数据 对于小白来说,爬虫可能是一件非常复杂. 技术门槛很高的事情. 比如有人认为学爬虫必须精通 Python ,然后哼哧哼哧系统学习 Python 的每个知识点,很久之 ...

最新文章

  1. redhat6.4 添加yum本地源和安装virtualbox增强组件
  2. 利用ISCSI存储技术构建IP存储网络(安全篇)
  3. oracle 10g 手动创建scott(tiger) schema
  4. spring源码分析之@Conditional
  5. android webview 重定向 goback,Android WebView 网址重定向影响 goBack
  6. 制作Slider组件
  7. C#.NET中的事件2
  8. php symbol table,gdb方式遍历EG(symbol_table) 哈希表的key_PHP教程
  9. 保姆级教程 | TensorFlow-YOLOv3 从本地训练到服务器部署全过程
  10. mysql 事务 游标_mysql之——存储过程 + 游标 + 事务
  11. python对象之间的关系
  12. cap 2 加州房价预测
  13. 奇幻之旅,全世界畅游
  14. 处理win10系统自动休眠bug
  15. 【前端笔记】SCSS学习篇之一:基础入门
  16. matlab中左移右移如何表示,汇编语言SHLD(双精度左移)和SHRD(双精度右移)指令...
  17. 2021淘宝天猫双11预售抢购什么时候开始及淘宝天猫双十一预售活动入口?
  18. 斧子演示(AxeSlide):新时期,新用法
  19. 安卓学习之学生签到APP(一)
  20. 2602 Bone Collector

热门文章

  1. android怎么根据标题解析json,如何在android中解析没有json对象标题的json数组?
  2. 【C++深度剖析教程16】智能指针的分析
  3. xshell 连接不了 centos7
  4. [UE4]单机游戏改网络游戏,不完全清单
  5. Linux下搭建iSCSI共享存储详细步骤(服务器模拟IPSAN存储)
  6. re.compile
  7. Poj 2676 Sudoku[dfs]
  8. [剑指offer]面试题第[63]题[Leetcode][第121题][JAVA][买卖股票的最佳时机][动态规划][暴力]
  9. 前端对所有文件请求添加header_【前端面试必问】浏览器缓存原理?送你满分答案...
  10. 休眠后gpio状态_1.Linux电源管理-休眠与唤醒