前言

大家在接口测试的过程中,很多时候会用到对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函数代码示例

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

import csv

import json

import requests

import time

import unittest

def readCSV(self,filename):

'''

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

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

'''

datas= []

try:

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

withopen(filename,'r') as csvfile :

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

reader= csv.DictReader(csvfile)

for rowin 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个方法)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

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函数示例

1

2

3

4

5

6

7

8

9

def assertResult(self,except_value,real_value):

'''

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

:param except_value: string 指定字符串

:param real_value: string 样本字符串

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

'''

ifsuccess= except_valuein str(real_value)

return ifsuccess

6、write_CSV函数示例

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

def writeCSV(self,filename,results):

'''

写入csv文件指定内容

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

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

:return: 无

'''

print("写文件:",filename)

#以DictWriter的方式写文件

withopen(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 resultin results:

writer.writerow(result)

csvfile.close()

7、test_interface1函数示例

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

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 testcasein 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是测试开发不容错过的利器之一。

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

转载地址:https://www.jb51.net/article/139908.htm

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

  1. python gui编程 自动化框架_使用Python进行GUI操作自动化

    前言 本文介绍怎样使用Python进行跨平台的GUI操作的,其中使用的一个工具包是pyautogui,PyAutoGUI可以模拟鼠标的移动.点击.拖拽,键盘按键输入.按住操作,以及鼠标+键盘的热键同时 ...

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

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

  3. python 自动化框架_学会Python+Selenium,分分钟搭建Web自动化框架!

    用python+selenium实现UI自动化测试,要有一些HTML和xpth的基础,当然python基础一定是必须要会的.笔者建议花点时间了解下相关基础知识,不至于后面发懵. 一.什么是seleni ...

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

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

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

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

  6. python爬取百度文库_利用Python语言轻松爬取数据

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

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

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

  8. python 翻译库本地库_利用python爬取并翻译GEO数据库

    原标题:利用python爬取并翻译GEO数据库 GEO数据库是NCBI创建并维护的基因表达数据库,始于2000年,收录了世界各国研究机构提交的高通量基因表达数据,现芯片集数据量高达12万以上.想要从这 ...

  9. python自动生成word报告_利用Python实现报告自动生成

    前几天,在网上看到一篇介绍利用Python组件实现MS word内容生成的文章.可能是很久没接触编码,感觉在技术领域变得有点孤陋寡闻了,看见一些实用的功能都觉的屌屌的.以前经常通过代码写Excel文件 ...

最新文章

  1. xmind快速上手使用教程,提高工作效率
  2. rh9.0虚拟机dmesg启动过程分析(1)
  3. Java8新的异步编程方式 CompletableFuture(三)
  4. Lucene概述第一部分:创建索引
  5. C++(STL):28 ---关联式容器map用法
  6. python excel取列_python取excel表格第一列数据-python操作excel,使用xlrd模块,获取某一列数据的......
  7. C语言/找出任意两整数之间的素数以及他们的和
  8. 学习Selenium 自动化从一张藏宝图开始
  9. javascript模板库jsrender加载并缓存外部模板文件
  10. [Redis] redis-cli 命令总结
  11. mybatis传参——parameterType
  12. 条件数、奇异值与海森矩阵
  13. 森林防火系统集成解决方案
  14. [读书笔记—学习方法]《深度学习的艺术》-采铜
  15. Hyperic HQ简介
  16. coreldraw基本工具(2)
  17. 前端技能树,面试复习第 54 天—— 手写代码:情景题
  18. BIOS、UEFI、Boot Loader都是些什么
  19. java获取分贝_android 声音强度、分贝 大小检测 源码下载(as版)
  20. 【计算机图形学入门】笔记5:光栅化(三角形的离散化)

热门文章

  1. iOS 12.4 越狱已经发布
  2. 【转载】shell实例手册
  3. CPU虚拟化的常见技术
  4. 【转】Nginx服务并发过10万的Linux内核优化配置
  5. [2-sat]HDOJ3622 Bomb Game
  6. H.264学习笔记2——帧内预测
  7. 通用的类-可直接存储的Dictionary,可以被JSON或NSUserDefaults
  8. 数据库设计 Step by Step (2)——数据库生命周期
  9. URLRewiter使用
  10. SQLServer查询所有表所有字段包含xx的信息