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进行参数化呢

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表格中的数据了

robotest 接口自动化测试之数据的来源之读取excel数据之ddt数据驱动进行接口请求_第1张图片

然后是配合接口请求

#!/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()

断点查看下

robotest 接口自动化测试之数据的来源之读取excel数据之ddt数据驱动进行接口请求_第2张图片

执行一下

从result_vos提取abstract1 看看人家的备注哈哈哈

生活不止眼前的苟且,还有读不懂得诗和去不了的远方!!!!

C:\Python\python.exe G:/软件测试/接口测试/Robotest/testcase/test1.py
------------------------------------------------开始执行------------------------------------------------
.路上每个人都是我的‘师傅’,学会他们的绝世武功,每天都能有不同的收获,最后成为007测试行业的007.

生活不止眼前的苟且,还有读不懂得诗和去不了的远方!!!!----测试菜鸟一枚
让碎片成体系, 让测试更专业!
小弟毕业于一个三流的学校,大学时贪玩各种游戏,但很少旷课,热爱IT...辗转反侧成为了一名软件测试工程师。
软件开发 软件测试 系统维护 脚本自动化
软件测试,接口测试,性能测试,自动化测试,python,测试管理,QA,QC,QM,需求管理,质量管理,过程管控
从事过一段时间的开发,对性能测试有一点心得,目前在一家电商从事接口测试和性能测试工作。欢迎同行交流QQ...
三年前端测试,四年后端测试,记录菜鸟成长路...
写了一本书https://github.com/easonhan007/webdriver_guide。webdriver,评价还不错。搭建和维护了watir-...


从事软件测试2年半时间。
11111111111111111111111111111111111111111


java、oracle和测试相关知识
软件测试
测试
我从事软件无线电处理平台设计和开发,通信系统构建,集成和测试。  具体包括以下几个方面:  1. 信号检测...
黑盒测试人员和用户,都是站在实际应用层进行操作,因此他们对应用层的可用性、实用性非常关注。...

一个测试工程师
我是一个软件测试员
十年软件测试,专注测试
软件测试小苦逼一枚
有软件开发项目及网站开发、测试及维护的工作经验,并且本人沟通能力及团队协作意识强。  茫茫人群,寻找...
开发测试工作
软件测试工程师
微电子技术包括系统电路设计、器件物理、工艺技术、材料制备、自动测试以及封装、组装等一系列专门的技术,...
------------------------------------------------结束执行------------------------------------------------
------------------------------------------------开始执行------------------------------------------------
526172211A0700CE997380000D0000000000000027371C18250E82F2BBAC589E956CC0F856742B852C7701B9F836D211AEB...
熟悉产品需求整理、原型设计、开发跟进、产品测试等一整个流程;
对产品的现有功能进行升级,根据产品...
自动化测试、持续测试、尽早测试
 熟悉软件工程的思想,有领导10人以上开发团队进行软件开发测试的经验 对UMTS移动通信网络的系统结构非常...
------------------------------------------------结束执行------------------------------------------------
------------------------------------------------开始执行------------------------------------------------
..
----------------------------------------------------------------------
Ran 3 tests in 0.736s

OK
网络安全、安全测试
1.	熟悉测试相关原理及流程,负责过具体MP&NPI专案的带动;
2.	有很好的测试相关经验,并有较好的分析...
测试简介
设计、产品、开发、测试啥都干  IT、股票、美食、游戏、美女啥都喜欢
2007-02-02 近期还是不想考虑换工作的问题009-03-27 "2009-03-25 是做localization的测试,不适合EMC的职位...
 熟悉软件工程的思想,有领导10人以上开发团队进行软件开发测试的经验 对UMTS移动通信网络的系统结构非常...
------------------------------------------------结束执行------------------------------------------------

Process finished with exit code 0

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

robotest 接口自动化测试之数据的来源之读取excel数据之ddt数据驱动进行接口请求_第3张图片

你可能感兴趣的:(接口自动化测试,Python,软件测试)