unittest---ddt+Excel完成参数化

  前面介绍了几种参数化内容,有ddt,paramunittest,ddt+yaml等例子,今天安静在来介绍一种方法ddt+Excel的方法进行完成数据参数化

读取Excel

安静以前写了一篇通过python读取excel的文章,里面简单的介绍了如何读取excel和写入excel内容。文章地址:python读写Excel方法(xlwt和xlrd)

稳固而执行,可以为师也。一起温习一遍。

这里安静还是那接口来写了,先写个接口需要的参数内容

1、安装xlrd

2、完成表格实例化

3、循环读取表格内容(这里安静把表格的内容分别放到一个列表中)方便后续通过ddt进行读取

import xlrd
def get_data(file_name):
    aa = []
    book = xlrd.open_workbook(file_name)
    sheet = book.sheet_by_index(0)
    for i in range(1, sheet.nrows):
        aa.append(list(sheet.row_values(i, 0, sheet.ncols)))
    return aa
result = get_data('123.xlsx')
print(result)

打印结果:

[['上海', '331eab8f3481f37868378fcdc76cb7cd', '上海'], ['北京', '331eab8f3481f37868378fcdc76cb7cd', '北京'], ['广州', '331eab8f3481f37868378fcdc76cb7c', '错误的请求KEY']]

Ddt+Excel

上面的excel中的数据已经得到了,我们需要把数据和ddt结合在一起,这里安静拿前面的接口进行调试

1、封装接口内容

2、导入unittests模块

3、通过ddt读取excel结果

import ddt
import requests
import unittests

@ddt.ddt
class Test(unittest.TestCase):
    def select(self,city,key):
        url = 'http://apis.juhe.cn/simpleWeather/query'
        data = {
            "city":city,
            "key":key
        }
        r = requests.post(url,data=data)
        return r

    @ddt.data(*result)
    @ddt.unpack
    def test_01(self,city,key,cake):
        result = self.select(city,key)
        print(result.text)
        self.assertIn(cake,result.text)


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

打印结果:

test_01_1___上海____331eab8f3481f37868378fcdc76cb7cd____上海__ (__main__.Test) ... ok
{"reason":"查询成功!","result":{"city":"上海","realtime":{"temperature":"17","humidity":"49","info":"晴","wid":"00","direct":"东北风","power":"1级","aqi":"30"},"future":[{"date":"2020-11-11","temperature":"13\/19℃","weather":"晴","wid":{"day":"00","night":"00"},"direct":"东风转东北风"},{"date":"2020-11-12","temperature":"14\/21℃","weather":"多云转晴","wid":{"day":"01","night":"00"},"direct":"东风转东北风"},{"date":"2020-11-13","temperature":"14\/20℃","weather":"晴转多云","wid":{"day":"00","night":"01"},"direct":"东北风"},{"date":"2020-11-14","temperature":"15\/20℃","weather":"多云","wid":{"day":"01","night":"01"},"direct":"东北风"},{"date":"2020-11-15","temperature":"17\/21℃","weather":"阴转小雨","wid":{"day":"02","night":"07"},"direct":"东风"}]},"error_code":0}
test_01_2___北京____331eab8f3481f37868378fcdc76cb7cd____北京__ (__main__.Test) ... ok
{"reason":"查询成功!","result":{"city":"北京","realtime":{"temperature":"14","humidity":"42","info":"霾","wid":"53","direct":"西南风","power":"1级","aqi":"186"},"future":[{"date":"2020-11-11","temperature":"4\/16℃","weather":"晴转多云","wid":{"day":"00","night":"01"},"direct":"南风转北风"},{"date":"2020-11-12","temperature":"3\/19℃","weather":"晴","wid":{"day":"00","night":"00"},"direct":"北风"},{"date":"2020-11-13","temperature":"3\/15℃","weather":"晴转多云","wid":{"day":"00","night":"01"},"direct":"东南风转南风"},{"date":"2020-11-14","temperature":"5\/14℃","weather":"多云","wid":{"day":"01","night":"01"},"direct":"南风转北风"},{"date":"2020-11-15","temperature":"6\/15℃","weather":"多云转小雨","wid":{"day":"01","night":"07"},"direct":"北风转东风"}]},"error_code":0} test_01_3___广州____331eab8f3481f37868378fcdc76cb7c____错误的请求KEY__ (__main__.Test) ... ok {"resultcode":"101","reason":"错误的请求KEY","result":null,"error_code":10001} ---------------------------------------------------------------------- Ran 3 tests in 0.414s OK

完整代码

import xlrd
import unittest
import ddt
import requests

def get_data(file_name):
    aa = []
    book = xlrd.open_workbook(file_name)
    sheet = book.sheet_by_index(0)
    for i in range(1, sheet.nrows):
        aa.append(list(sheet.row_values(i, 0, sheet.ncols)))
    return aa
result = get_data('123.xlsx')
@ddt.ddt
class Test(unittest.TestCase):
    # 封装接口
    def select(self,city,key):
        url = 'http://apis.juhe.cn/simpleWeather/query'
        data = {
            "city":city,
            "key":key
        }
        r = requests.post(url,data=data)
        return r

    @ddt.data(*result)
    @ddt.unpack
    # 进行参数化
    def test_01(self,city,key,cake):
        result = self.select(city,key)
        print(result.text)
        self.assertIn(cake,result.text)

if __name__ == '__main__':
    # 通过verbosity=2 查看详细内容
    unittest.main(verbosity=2)

本篇主要用到了python读取Excel内容以及ddt的使用方法,学习了这个我们也可以举一反三,通过读取数据库内容,然后在通过ddt的形式进行参数化。

如果安静写的对您有帮助,点个关注,持续更新~~有什么不懂的或者写错的地方可以在下方进行评论留言,安静看到后第一时间进行回复。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
搭建一个基于Python + requests + pytest + ddt + unittest 的自动化测试框架,可以按照以下步骤进行: 1. 安装所需依赖:在你的项目环境安装 requests、pytestddtunittest。 ``` pip install requests pytest ddt unittest ``` 2. 创建项目结构:在你的项目目录下创建以下文件和文件夹结构: ``` ├── tests │ ├── __init__.py │ └── test_cases.py ├── data │ └── test_data.xlsx └── conftest.py ``` 3. 编写测试用例:在 `test_cases.py` 文件编写你的测试用例,可以使用 `ddt` 来实现数据驱动,示例: ```python import unittest import ddt from data.test_data import TestData from utils.api_helper import APIClient @ddt.ddt class APITestCase(unittest.TestCase): @classmethod def setUpClass(cls): cls.client = APIClient() @ddt.data(*TestData.test_data) def test_api(self, data): response = self.client.send_request(data['url'], data['method'], data['payload']) self.assertEqual(response.status_code, data['expected_status']) self.assertEqual(response.json(), data['expected_response']) ``` 4. 创建测试数据:在 `test_data.xlsx` 文件创建测试数据,可以使用 `openpyxl` 库来读取 Excel 数据,示例: ```python import openpyxl class TestData: workbook = openpyxl.load_workbook('data/test_data.xlsx') sheet = workbook['Sheet1'] test_data = [] for row in sheet.iter_rows(min_row=2, values_only=True): test_data.append({ 'url': row[0], 'method': row[1], 'payload': row[2], 'expected_status': row[3], 'expected_response': row[4] }) ``` 5. 创建 API 辅助类:在 `api_helper.py` 文件创建一个 APIClient 类,用于发送 API 请求,示例: ```python import requests class APIClient: def send_request(self, url, method, payload): if method == 'GET': response = requests.get(url, params=payload) elif method == 'POST': response = requests.post(url, json=payload) elif method == 'PUT': response = requests.put(url, json=payload) elif method == 'DELETE': response = requests.delete(url) else: raise ValueError('Invalid HTTP method') return response ``` 6. 创建 pytest 配置:在 `conftest.py` 文件配置 pytest,示例: ```python import pytest def pytest_addoption(parser): parser.addoption("--base-url", action="store", default="http://localhost:8000", help="Base URL for API tests") @pytest.fixture(scope="session") def base_url(request): return request.config.getoption("--base-url") ``` 7. 运行测试:在命令行执行以下命令来运行测试用例: ``` pytest -s tests/ ``` `-s` 参数用于显示打印信息。 这样,你就搭建了一个基于 Python + requests + pytest + ddt + unittest 的自动化测试框架,可以进行接口测试。你可以根据实际需求进一步扩展和优化这个框架。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值