前言

大家在接口测试的过程中,很多时候会用到对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是测试开发不容错过的利器之一。

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

如果你

①从事功能测试,想进阶自动化测试

②在测试界混了1、2年,依然不会敲代码

③面试大厂却屡屡碰壁

我邀你进群吧!来吧~~测试员,313782132(Q群里有技术大牛一起交流分享,学习资源的价值取决于你的行动,莫做“收藏家”)获取更多大厂技术、面试资料

如果对python自动化测试、web自动化、接口自动化、移动端自动化、面试经验交流等等感兴趣的测试人,可以关注微信公众号:【伤心的辣条】,获取软件测试工程师大厂面试资料!

最后:

凡事要趁早,特别是技术行业,一定要提升技术功底,丰富自动化项目实战经验,这对于你未来几年职业规划,以及测试技术掌握的深度非常有帮助。

python数据驱动读取用例_利用Python如何实现数据驱动的接口自动化测试相关推荐

  1. python怎么读取sav格式_利用Python读取外部数据文件

    利用Python读取外部数据文件 [color=rgb(0, 0, 0) !important]刘顺祥 [color=rgb(0, 0, 0) !important]摘要: 不论是数据分析,数据可视化 ...

  2. 如何用python完成评分功能呢_利用python基于电影评分数据进行

    本文以Movielens 1M数据集为例,利用Python,对电影的各项数据进行分析,分析对于不同的性别的电影评分,以及性别差异对评分的差异 加载python库以及数据: import pandas ...

  3. python数据对比找不同_利用Python读取文件的四种不同方法比对

    利用Python读取文件的四种不同方法比对 大家都知道Python 读文件的方式多种多样,但是当需要读取一个大文件的时候,不同的读取方式会有不一样的效果.下面就来看看详细的介绍吧. 场景 逐行读取一个 ...

  4. python读取sas数据集_利用Python获取SAS和R自带数据集

    图:北京-奥森公园-2018年4月 无论是SAS.R还是Python,本身都自带一些数据集,对于初学者来说,可以通过这些自带的小数据集进行编程练习,无疑是非常方便的.SAS.R作为统计分析软件,本身自 ...

  5. python根据url下载数据_利用Python如何实现根据URL地址下载并保存文件至对应目录...

    利用Python如何实现根据URL地址下载并保存文件至对应目录 发布时间:2020-11-16 14:23:11 来源:亿速云 阅读:58 作者:Leah 这篇文章将为大家详细讲解有关利用Python ...

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

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

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

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

  8. python用什么处理文件_利用Python如何快速处理文件

    利用Python如何快速处理文件 我之前要合并将近1000个CSV表格 每个表格共370列,约360行不等,列名相同 三个方案瞬间浮现在我眼前: 1.Ctrl C + Ctrl V--可以睡公司了: ...

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

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

最新文章

  1. 面向用户计算机,一款面向普通用户的防火墙软件,让你了解计算机到底产生了哪些网络流量?...
  2. 一般实现分布式锁都有哪些方式?
  3. UML类图与类的关系
  4. 高可用可伸缩架构实用经验谈
  5. HTML前端常见攻击方式案例讲解
  6. python的映射_Python学习:映射函数(map)和函数式编程工具(filter和reduce)
  7. SAP Cloud Application Programming CatalogService 默认的路径
  8. oracle负数怎么比较大小,输出负数【oracle学习吧】_百度贴吧
  9. Android_内存泄露
  10. c++堆栈溢出怎么解决_Windows Kernel Exploit 内核漏洞学习(2)-内核栈溢出
  11. 常见CSS选择器分类
  12. ajax 解决csrf的3种方法,input标签的文件上传
  13. navicat的注册出现提示No All Pattern Found! File Already Patched?
  14. 计算机操作系统-2-处理器管理
  15. Chromium扩展(Extension)机制简要介绍和学习计划
  16. 思杰desktop7.6申请90天试用的License
  17. (完整项目系统)人工智能医疗健康管理疾病诊断分析系统,医疗健康机器人系统框架
  18. Python+Flask(1)--AmazeUI后台管理开发框架
  19. 自己动手不求人 - ghost安装系统软件硬盘安装器 安装ghost图文教程
  20. NBA2KOL2幸运突破概率表和拆卡偷卡教程

热门文章

  1. 常用js(javascript)函数
  2. Spring Security 5.0.0正式发布
  3. 第18天:京东网页头部制作
  4. LeetCode – Refresh – Exceel Sheet Column Number
  5. 字符编码 and cpp
  6. 在.Net中执行js
  7. Java正则表达式入门概念与范例代码
  8. 快速学习javascript 整体架构方法
  9. double-talk检测算法分类
  10. Android ConnectivityManager详解