requests+openpyxl进行接口自动化测试

最近这两天,用requests+openpyxl写接口自动化测试代码,发现有些参数上的问题让人费解。

上图

测试用例的设计是,空用户名和正确的密码,当空用户名用双引号表示时,调用代码发送请求,竟然得到了如下的结果;当空密码采用同样的双引号空值表示时,得到了同样的报错。

所以,我把空值用单引号来表示,重新运行代码,得到了如下结果

把空用户名的空值用不填数据来表示时,接口读取的是None, 但解读为’账户不存在‘,这会不会影响测试结果?

空密码用单引号来表示,因为excel表格对文本类数据会默认前面有个单引号,所以实际不聚焦单元格的话,显示的是单个单引号,接口读取的也是单个单引号,接口返回’登录失败,密码错误‘,它是解读为密码是个单引号所以报错吗?

基于excel表格的特征,我把空用户名或空密码这样的值用看起来是两个单引号的方式表示,再次运行代码,

结果是这样

思考:接口是把参数值当作''这样的单引号,还是当成我们常用''表示的空值?

自然,当不传用户名或密码时,接口返回的是’客户端非法请求:缺少必要参数username/password'这样的消息。

### 使用 Python、pytest、requests 和 Allure 进行接口自动化测试 #### 准备工作 为了构建一个完整的接口自动化测试框架,需要安装几个必要的包。可以通过 pip 安装这些依赖项: ```bash pip install requests pytest allure-pytest pyyaml openpyxl ``` 这将确保环境中有足够的工具来编写和运行测试。 #### 测试结构设计 创建合理的文件夹结构有助于更好地管理和维护测试代码。建议采用如下目录布局[^1]: - `./tests`:放置所有的测试脚本。 - `./data`:用于存储测试所需的数据集(可以是 JSON 文件或 Excel 表格)。 - `./config`:配置文件所在位置。 - `./reports`:保存生成的测试报告。 #### 编写测试案例 下面是一个简单的例子展示如何利用 Requests 库发起 HTTP 请求并验证响应结果: ```python import requests def test_get_user_info(): url = "https://api.example.com/user" response = requests.get(url) assert response.status_code == 200, f"Unexpected status code {response.status_code}" user_data = response.json() assert 'id' in user_data and isinstance(user_data['id'], int), "User ID should be an integer." ``` 此函数会向指定 URL 发送 GET 请求,并检查返回的状态码以及用户信息中的特定字段是否存在且类型正确。 #### 配置 Pytest 执行命令 定义入口文件 main_run.py 来集中控制整个项目的执行流程[^2]: ```python import os import pytest def run_tests(): pytest.main([ '-v', './tests/', # 指定要扫描的测试用例路径 '--alluredir=./results', # 设置Allure的结果输出目录 '--clean-alluredir' # 清理之前的测试记录 ]) os.system('allure serve results') # 启动本地服务查看最新一次的测试报告 if __name__ == "__main__": run_tests() ``` 这段代码设置了 Pytest 的参数选项,指定了测试用例的位置、Allure 报告的存放地点,并清理旧有的测试数据;最后调用了 `os.system()` 方法启动了一个临时服务器以便即时预览 HTML 版本的测试报告。 #### 数据驱动测试 (可选) 如果希望进一步增强灵活性,则可以在测试过程中引入外部数据源。例如,在 YAML 或者 Excel 中准备一组或多组输入值及其预期输出,再通过编程方式读取它们参与实际测试过程[^3]。 对于 YAML 格式的测试数据管理,可以这样操作: ```python import yaml with open('./data/test_cases.yaml', encoding='utf8') as file: cases = yaml.safe_load(file) @pytest.mark.parametrize("input_params", cases["get_user"]) def test_with_yaml(input_params): ... ``` 这里假设有一个名为 `test_cases.yaml` 的文件包含了多个不同场景下的入参组合,上述方法能够遍历每一个条目完成相应的断言逻辑。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值