51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3847|回复: 0
打印 上一主题 下一主题

[原创] requests通过excel读取测试用例

[复制链接]
  • TA的每日心情
    擦汗
    3 天前
  • 签到天数: 1042 天

    连续签到: 4 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2021-4-16 09:41:53 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
    前言
      编写正常的[url=]测试[/url]用例,一般都是通过excel进行编写的,当我们进行编写自动化测试用例的时,也是通过功能用例进行编写的,那么有没有方法直接通过python读取我们的excel然后完成自动化测试用例编写。

      整体思路
      1.通过Excel编写测试用例,整理测试数据;
      2.通过Python读取Excel数据;
      3.将读出来的数据进行放入到requests中进行请求并做对应断言。
      整体思路其实很简单,就是通过python读取Excel然后在导入我们的requests中进行做接口自动化。

      通过Excel编写用例
      安静在网上找了一些开源的接口进行编写到Excel中,由于接口比较简单,就写了用例标题、url地址、请求方法、请求参数、预期结果等操作。


      读取Excel
      在python读取Excel的方法有很多,这里安静就介绍最常用的库  xlrd  xlrd可以进行完成对Excel的读取。xlrd属于Python的第三方库,需要重新安装。

      安装:
    pip install xlrd


      通过上面的Excel通过Excel完成读取操作。
    import xlrd
    # 将excel进行实例化
    book = xlrd.open_workbook('E:\\web\\123.xlsx')
    # 通过下标方法读取sheet值
    sheet = book.sheet_by_index(0)
    # 通过name值进行读取sheet
    # sheet = book.sheet_by_name('Sheet1')
    # 获取列表的总数
    nrows = sheet.nrows
    # 循环读取每行数据
    for i in range(1, nrows):
        # 通过每行进行读取数据
        # print(sheet.row_values(i))
        # 讲数据通过组合成dic+t格式
        data = dict(zip(sheet.row_values(0), sheet.row_values(i)))
        print(data)




      安静在上面简单的介绍了读取数据的方法,上述代码中通过字典的形式获取到了excel的全部数据内容。
      PS:这里通过字典的形式获取为了下面使用时好取值。


      request请求用例
      前面已经把用例需要用到的数据都已经存储下来了,那么接下来的就是需要进行发送请求。
      这里通过requests的方式进行发送请求。先将requests请求进行简单的封装。通过把请求方式、请求类型、请求参数放入到requests中。
    def Requests_result(item):
      # 封装request请求,并读取数据
        response = requests.request(
                method=item['method'],
                url=item['url'],
                data=json.loads(item['body'])
            )
        result = response.json()['reason']
        # 这里返回实际结果是否和预期值一样
        return result == item['expect']




      整体代码
      pytest
      上面已经将各个部分的内容都简单的做了介绍了,这里就直接上整体代码,这里通过requests+pytest+excel进行完成的读取excel数据完成测试用例。
    import xlrd
    import requests
    import json
    import pytest
    def Read_Excel():
        # 将excel进行实例化
        book = xlrd.open_workbook('E:\\web\\123.xlsx')
        # 通过下标方法读取sheet值
        sheet = book.sheet_by_index(0)
        # 循环读取每行数据
        return [dict(zip(sheet.row_values(0), sheet.row_values(row))) for row in range(1, sheet.nrows)]

    class Test_01:
        def Requests_result(self, item):
            # 封装请求
            response = requests.request(
                    method=item['method'],
                    url=item['url'],
                    data=json.loads(item['body'])
                )
            result = response.json()['reason']
            print(result)
            return result == item['expect']
        # 通过参数化的方式进行导入excel的数据
        @pytest.mark.parametrize('item', Read_Excel())
        def test_01(self, item):
            response_result = self.Requests_result(item)
            # 断言请求返回的结果是否为True
            assert response_result == True

    if __name__ == '__main__':
        pytest.main(['-vs'])




      通过执行发现,我们的requests已经通过excel来完成了测试读取测试用例。并通过单元测试-pytest完成了判断是否通过。


      unittest
      上述方法是通过pytest来完成的,那么unittest当然也可以完成。这里通过requests+unittest+ddt+excel进行来完成读取数据内容。
    import xlrd
    import requests
    import json
    import unittest
    import ddt
    def Read_Excel():
        # 将excel进行实例化
        book = xlrd.open_workbook('E:\\web\\123.xlsx')
        # 通过下标方法读取sheet值
        sheet = book.sheet_by_index(0)
        # 循环读取每行数据
        return [dict(zip(sheet.row_values(0), sheet.row_values(row))) for row in range(1, sheet.nrows)]
    @ddt.ddt
    class Test_01(unittest.TestCase):
        def Requests_result(self, item):
            response = requests.request(
                    method=item['method'],
                    url=item['url'],
                    data=json.loads(item['body'])
                )
            result = response.json()['reason']
            return result
        # 通过ddt进行读取数据
        @ddt.data(*Read_Excel())
        def test_01(self, data):
            response_result = self.Requests_result(data)
            self.assertTrue(response_result)

    if __name__ == '__main__':
        unittest.main()




      执行发现,通过unittest的也成功的读取了excel的数据以及完成了接口内容。

      总结
      这里安静简单的介绍了如何通过python进行读取excel的方法从而实现了接口自动化的类似操作,当然如何运用到公司项目中,这个要看根据公司的项目来做了。
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-10 06:37 , Processed in 0.062526 second(s), 26 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表