robotest 接口自动化测试之数据的来源之读取excel数据之ddt数据驱动进行接口请求

 数据驱动,说的简单一点,就是测试数据的参数化。

接之前的文章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进行参数化呢

apicase_nameurlmethodquery
search查询用户https://so.csdn.net/api/v2/searchgetq=测试之007&t=userinfo&p=1&s=0&tm=0&lv=-1&ft=0&l=&u=&platform=pc
search查询博客https://so.csdn.net/api/v2/searchgetq=测试之008&t=userinfo&p=1&s=0&tm=0&lv=-1&ft=0&l=&u=&platform=pc
search查询代码https://so.csdn.net/api/v2/searchgetq=测试之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

如果你看懂了请支持下!~~~~多少随意,我们下会再见

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值