数据驱动,说的简单一点,就是测试数据的参数化。
接之前的文章https://blog.csdn.net/u011640418/article/details/111768856
import requests
import json
# 最基本的GET请求
url = 'https://so.csdn.net/api/v2/search'
params = 'q=自动化测试!&t=blog&p=1&s=0&tm=0&lv=-1&ft=0&l=&u=&platform=pc'
# response=requests.get('https://so.csdn.net/api/v2/search?q=自动化测试!&t=blog&p=1&s=0&tm=0&lv=-1&ft=0&l=&u=&platform=pc')
# response=requests.get(url='https://so.csdn.net/api/v2/search?q=自动化测试!&t=blog&p=1&s=0&tm=0&lv=-1&ft=0&l=&u=&platform=pc')
# response=requests.get(url='https://so.csdn.net/api/v2/search',params='q=自动化测试!&t=blog&p=1&s=0&tm=0&lv=-1&ft=0&l=&u=&platform=pc')
response=requests.get(url=url,params = params)
# print(response.text)
# 将返回值转化成json的对象
responseobj = response.json()
# 将python对象编码成Json字符串,
print(json.dumps(responseobj, sort_keys=True,ensure_ascii=False, indent=4, separators=(', ', ': ')))
我们是不是可以把URL、参数params进行参数化呢
api | case_name | url | method | query |
search | 查询用户 | https://so.csdn.net/api/v2/search | get | q=测试之007&t=userinfo&p=1&s=0&tm=0&lv=-1&ft=0&l=&u=&platform=pc |
search | 查询博客 | https://so.csdn.net/api/v2/search | get | q=测试之008&t=userinfo&p=1&s=0&tm=0&lv=-1&ft=0&l=&u=&platform=pc |
search | 查询代码 | https://so.csdn.net/api/v2/search | get | q=测试之009&t=userinfo&p=1&s=0&tm=0&lv=-1&ft=0&l=&u=&platform=pc |
执行的思路是测试数据从excel文件读取,每次读取URL、入参然后执行一遍接口
第一次取的数据url:https://so.csdn.net/api/v2/search 查询参数是q=测试之007&t=userinfo&p=1&s=0&tm=0&lv=-1&ft=0&l=&u=&platform=pc
然后执行一次CSDN接口请求查询关于测试之007的用户
第二次取的数据url:https://so.csdn.net/api/v2/search 查询参数是q=测试之007&t=userinfo&p=1&s=0&tm=0&lv=-1&ft=0&l=&u=&platform=pc
然后执行一次CSDN接口请求查询关于测试之008的用户
第三次取的数据url:https://so.csdn.net/api/v2/search 查询参数是q=测试之007&t=userinfo&p=1&s=0&tm=0&lv=-1&ft=0&l=&u=&platform=pc
然后执行一次CSDN接口请求查询关于测试之008的用户
这其中需要读取excel文件的内容,我们需要使用ddt来进行数据驱动
其中ddt读取可以看看例子4第二点https://blog.csdn.net/u011640418/article/details/111300876
我们需要数据是什么样子呢
是的我们需要把每一行放到一个字典dict里面以键值对形式保存
第一行
{
"api": "search",
"case_name": "查询用户",
"method": "get",
"query": "q=测试之007&t=userinfo&p=1&s=0&tm=0&lv=-1&ft=0&l=&u=&platform=pc",
"url": "https://so.csdn.net/api/v2/search"
}
第二行
{
"api": "search",
"case_name": "查询博客",
"method": "get",
"query": "q=测试之008&t=userinfo&p=1&s=0&tm=0&lv=-1&ft=0&l=&u=&platform=pc",
"url": "https://so.csdn.net/api/v2/search"
}
第三行
{
"api": "search",
"case_name": "查询代码",
"method": "get",
"query": "q=测试之009&t=userinfo&p=1&s=0&tm=0&lv=-1&ft=0&l=&u=&platform=pc",
"url": "https://so.csdn.net/api/v2/search"
}
然后整体放到一个列表list里面
[
{
"api": "search",
"case_name": "查询用户",
"method": "get",
"query": "q=测试之007&t=userinfo&p=1&s=0&tm=0&lv=-1&ft=0&l=&u=&platform=pc",
"url": "https://so.csdn.net/api/v2/search"
},
{
"api": "search",
"case_name": "查询博客",
"method": "get",
"query": "q=测试之008&t=userinfo&p=1&s=0&tm=0&lv=-1&ft=0&l=&u=&platform=pc",
"url": "https://so.csdn.net/api/v2/search"
},
{
"api": "search",
"case_name": "查询代码",
"method": "get",
"query": "q=测试之009&t=userinfo&p=1&s=0&tm=0&lv=-1&ft=0&l=&u=&platform=pc",
"url": "https://so.csdn.net/api/v2/search"
}
]
知道要的格式是什么样子就好办了
创建一个读取数据的文件readData.py
import openpyxl
import os
import json
from common.getpath import data_path
data_path = os.path.join(data_path, 'data.xlsx')
# 设置文件路径
class read_data(object):
def __init__(self):
self.wb = openpyxl.load_workbook(data_path) # 打开已有文件
def read_excel(self, Sheet_Name):
# 根据sheet名字获得sheet
# self.wb.get_sheet_by_name(Sheet_Name)旧版会报错
sheet = self.wb[Sheet_Name]
# 将sheet表中所有行数据存储在列表
data = list(sheet.rows)
title = []
result = []
for key in data[0]: # 读取第一行数据
title.append(key.value) # 把第一行的值做标题取出来
# print(title)
# ['api', 'case_name', 'url', 'method', 'query']
for rows in data[1:]:
dic = {}
for index, row in enumerate(rows):
# key是从标题过来的 title第N个对应的数据也是第N个title[index],value就是row.value
dic[title[index]] = row.value
# print("标题key是:"+title[index]+"----->对应的值value是:"+row.value)
# 标题key是:api----->对应的值value是:search
# 标题key是:case_name----->对应的值value是:查询用户
# print(dic)
# {'api': 'search'}
# {'api': 'search', 'case_name': '查询用户'}
# {'api': 'search', 'case_name': '查询用户', 'url': 'https://so.csdn.net/api/v2/search'}
# {'api': 'search', 'case_name': '查询用户', 'url': 'https://so.csdn.net/api/v2/search', 'method': 'get'}
# {'api': 'search', 'case_name': '查询用户', 'url': 'https://so.csdn.net/api/v2/search', 'method': 'get',
# 'query': 'q=测试之007&t=userinfo&p=1&s=0&tm=0&lv=-1&ft=0&l=&u=&platform=pc'}
# 循环一次向字典添加一对'key': 'value'
result.append(dic)
# 把每一行获取到的数据添加到一个列表中
return result
def read_all_excel(self):
sheet_list = []
for sheet in self.wb:
# print(sheet)
data = list(sheet.rows)
# print(data)
title = []
result = []
for key in data[0]: # 标题
title.append(key.value) # 标题取出来
for rows in data[1:]:
dic = {}
for index, row in enumerate(rows):
dic[title[index]] = row.value
result.append(dic)
sheet_list.append(result)
return sheet_list
read_data = read_data()
test1 = read_data.read_excel('search')
#
test2 = read_data.read_all_excel()
#
print(json.dumps(test1, sort_keys=True, ensure_ascii=False, indent=4, separators=(', ', ': ')))
# print(json.dumps(test2, sort_keys=True, ensure_ascii=False, indent=4, separators=(', ', ': ')))
我们执行一下看看是不是读取到excel表格中的数据了
然后是配合接口请求
#!/usr/bin/env python
# _*_ coding: utf-8 _*_
# @Time : 2020/12/26 0026 17:12
# @Author : 夕木酱
# @File : test1.py
import requests
import json
from common.readData import read_data
import unittest
from ddt import ddt, data, unpack
read_data = read_data()
test_data = read_data.read_excel('search')
# print(test_data)
print(json.dumps(test_data, sort_keys=True, ensure_ascii=False, indent=4, separators=(', ', ': ')))
@ddt
class Demo(unittest.TestCase):
# 前置条件
def setUp(self) -> None:
print('------------------------------------------------开始执行------------------------------------------------')
# 后置条件
def tearDown(self) -> None:
print('------------------------------------------------结束执行------------------------------------------------')
# 创建用例
@data(*test_data)
# [
# {
# "api": "search",
# "case_name": "查询用户",
# "method": "get",
# "query": "q=测试之007&t=userinfo&p=1&s=0&tm=0&lv=-1&ft=0&l=&u=&platform=pc",
# "url": "https://so.csdn.net/api/v2/search"
# },
# {
# "api": "search",
# "case_name": "查询博客",
# "method": "get",
# "query": "q=测试之008&t=userinfo&p=1&s=0&tm=0&lv=-1&ft=0&l=&u=&platform=pc",
# "url": "https://so.csdn.net/api/v2/search"
# },
# {
# "api": "search",
# "case_name": "查询代码",
# "method": "get",
# "query": "q=测试之009&t=userinfo&p=1&s=0&tm=0&lv=-1&ft=0&l=&u=&platform=pc",
# "url": "https://so.csdn.net/api/v2/search"
# }
# ]
# 这里加 * 后会将返回数据分为一个个的字典
# 然后在
@unpack # 二次分解元组
def test_testcase1(self, **value):
url = value.get('url')
params = value.get('query')
response = requests.get(url=url, params=params)
res = json.loads(response.text)
abstract1 = res['result_vos']
for item in abstract1:
print(item['abstract1'])
if __name__ == '__main__':
unittest.main()
断点查看下
执行一下
从result_vos提取abstract1 看看人家的备注哈哈哈
生活不止眼前的苟且,还有读不懂得诗和去不了的远方!!!!
C:\Python\python.exe G:/软件测试/接口测试/Robotest/testcase/test1.py
------------------------------------------------开始执行------------------------------------------------
.路上每个人都是我的‘师傅’,学会他们的绝世武功,每天都能有不同的收获,最后成为<em>007</em>,<em>测试</em>行业的<em>007</em>.
生活不止眼前的苟且,还有读不懂得诗和去不了的远方!!!!----<em>测试</em>菜鸟一枚
让碎片成体系, 让<em>测试</em>更专业!
小弟毕业于一个三流的学校,大学时贪玩各种游戏,但很少旷课,热爱IT...辗转反侧成为了一名软件<em>测试</em>工程师。
软件开发 软件<em>测试</em> 系统维护 脚本自动化
软件<em>测试</em>,接口<em>测试</em>,性能<em>测试</em>,自动化<em>测试</em>,python,<em>测试</em>管理,QA,QC,QM,需求管理,质量管理,过程管控
从事过一段时间的开发,对性能<em>测试</em>有一点心得,目前在一家电商从事接口<em>测试</em>和性能<em>测试</em>工作。欢迎同行交流QQ...
三年前端<em>测试</em>,四年后端<em>测试</em>,记录菜鸟成长<em>之</em>路...
写了一本书https://github.com/easonhan<em>007</em>/webdriver_guide。webdriver,评价还不错。搭建和维护了watir-...
从事软件<em>测试</em>2年半时间。
11111111111111111111111111111111111111111
java、oracle和<em>测试</em>相关知识
软件<em>测试</em>
<em>测试</em>
我从事软件无线电处理平台设计和开发,通信系统构建,集成和<em>测试</em>。 具体包括以下几个方面: 1. 信号检测...
黑盒<em>测试</em>人员和用户,都是站在实际应用层进行操作,因此他们对应用层的可用性、实用性非常关注。...
一个<em>测试</em>工程师
我是一个软件<em>测试</em>员
十年软件<em>测试</em>,专注<em>测试</em>
软件<em>测试</em>小苦逼一枚
有软件开发项目及网站开发、<em>测试</em>及维护的工作经验,并且本人沟通能力及团队协作意识强。 茫茫人群,寻找...
开发<em>测试</em>工作
软件<em>测试</em>工程师
微电子技术包括系统电路设计、器件物理、工艺技术、材料制备、自动<em>测试</em>以及封装、组装等一系列专门的技术,...
------------------------------------------------结束执行------------------------------------------------
------------------------------------------------开始执行------------------------------------------------
526172211A0700CE997380000D0000000000000027371C18250E82F2BBAC589E956CC0F856742B852C7701B9F836D211AEB...
熟悉产品需求整理、原型设计、开发跟进、产品<em>测试</em>等一整个流程;
对产品的现有功能进行升级,根据产品...
自动化<em>测试</em>、持续<em>测试</em>、尽早<em>测试</em>
熟悉软件工程的思想,有领导10人以上开发团队进行软件开发<em>测试</em>的经验 对UMTS移动通信网络的系统结构非常...
------------------------------------------------结束执行------------------------------------------------
------------------------------------------------开始执行------------------------------------------------
..
----------------------------------------------------------------------
Ran 3 tests in 0.736s
OK
网络安全、安全<em>测试</em>
1. 熟悉<em>测试</em>相关原理及流程,负责过具体MP&NPI专案的带动;
2. 有很好的<em>测试</em>相关经验,并有较好的分析...
<em>测试</em>简介
设计、产品、开发、<em>测试</em>啥都干 IT、股票、美食、游戏、美女啥都喜欢
2007-02-02 近期还是不想考虑换工作的问题<em>009</em>-03-27 "2009-03-25 是做localization的<em>测试</em>,不适合EMC的职位...
熟悉软件工程的思想,有领导10人以上开发团队进行软件开发<em>测试</em>的经验 对UMTS移动通信网络的系统结构非常...
------------------------------------------------结束执行------------------------------------------------
Process finished with exit code 0
如果你看懂了请支持下!~~~~多少随意,我们下会再见