接续前文,在上篇博客中我们编写了demo.py代码,里面代码过多冗余,更新代码:

#!/usr/bin/env python
# coding=utf-8 import requests class RunMain:
def __init__(self):
pass @staticmethod
def send_post(url,cookies,headers,params=None):
try:
res = requests.post(url=url,cookies=cookies,headers=headers,data=params)return res.status_code
except Exception as msg:
return msg @staticmethod
def send_get(url,cookies,headers,params=None,):
try:
res = requests.get(url=url,cookies=cookies,headers=headers,params=params,)return res.status_code
except Exception as msg:
return msg def run_main(self, url, method,cookies=None,headers=None,params=None):
if method == 'GET':
res = self.send_get(url,cookies,headers,params)
return res
elif method == 'POST':
res = self.send_post(url,cookies,headers,params)
return res
else:
print('不支持的请求方式!')

接下来我们采用Unittest框架进行搭建,使用ddt注解进行参数化。

#!/usr/bin/env python
# -*- coding:utf-8
from ddt import ddt,data,unpack
from Demo.demo import RunMain
import unittest
from urllib import parse
@ddt
class excelddt(unittest.TestCase):
@data(
[1, 'http://apis.juhe.cn/mobile/get', 'GET','{"phone":"13800000000","dtype":"json","key":"密匙"}', '', '', 200, '','Yes'],
[2, 'http://apis.juhe.cn/simpleWeather/query', 'POST','{"city": "济南","key": "密匙"}', '', '', 200, '', 'Yes']
)
@unpack
def testURL(self,id,url,method,params,headers,cookies,code,returns,run):
t=RunMain().run_main(url=url, method=method,headers=headers, params=params)
print(t)
self.assertEqual(t,code) if __name__ == '__main__':
unittest.main()

使用ddt参数化是为了进行excel取值,我们运行一下。

出现错误了,POST请求返回值异常。这个问题困扰了两天,无奈放弃,到最后也没分析出来结果。

更换pytest,用@pytest.mark.parametrize注解试试

import pytest
from Demo.demo import RunMain
@pytest.mark.parametrize(
"ID,URL,METHOD,PARAMS,HEADERS,COOKIES,RETURNCODE,RETURNTXT,YN",
[(1,"http://apis.juhe.cn/mobile/get",'GET',{"phone": "","dtype": "json","key": "x"},{"Content-Type":"application/json"},'',200,'','Yes'),
(2,"http://apis.juhe.cn/simpleWeather/query",'POST',{"city": "济南","key": "x"},{"Content-Type":"application/json"},'',200,'','No'),
(3,"http://apis.juhe.cn/simpleWeather/query",'POST',{"city": "济南","key": "x"},{"Content-Type":"application/json"},'',200,'','Yes'),
(4,"http://www.3wyuming.xyz:8080/BBSProject/userServlet.do",'GET',{"account": "x","pwd": "x"},{"Content-Type":"application/json"},'',200,'','Yes'),
(5,"http://www.3wyuming.xyz:8080/BBSProject/textServlet.do",'GET',{"md":"read","pid":""},{"Content-Type":"application/json"},'',200,'','Yes')],
ids=["case1","case2","case3","case4","case5"]
)
def test_url(ID,URL,METHOD,PARAMS,HEADERS,COOKIES,RETURNCODE,RETURNTXT,YN):
t = RunMain().run_main(url=URL, method=METHOD, headers=HEADERS, params=PARAMS)
assert t == RETURNCODE
if __name__ == '__main__':
pytest.main()

运行代码:

运行成功。

总结一下用参数化遇到的坑:

1.Unittest,ddt参数化,一直报错字符异常,返回值返回的为异常错误,导致断言失败。事后发现应该是中文问题。

2.Pytest,参数化中也是报错,具体错误是str没有item属性,我在Test.py里面发送请求一直正常状态,为什么使用参数化就会异常,转换思路,考虑到数据问题。打入断点,Debug寻找问题,发现Test.py里json格式数据类型都是dict,

但是参数化中属于str类型,于是知道,将数据中的{}括号放置于引号外面,发送请求,成功。

【接口自动化】Python+Requests接口自动化测试框架搭建【二】的更多相关文章

  1. 接口自动化-python+requests+pytest+csv+yaml

    本套代码和逻辑 是本人的劳动成果,如果有转载需要标注, 非常适合公司做项目的同学!!!小白也可以学哦! 1.项目目录  2.公共方法的封装 2.1如果不用配置文件 可以使用这个方法进行封装--但是有一 ...

  2. python+requests接口自动化测试框架实例详解

    python+requests接口自动化测试框架实例详解   转自https://my.oschina.net/u/3041656/blog/820023 摘要: python + requests实 ...

  3. python+requests接口自动化框架

    为什么要做接口自动化框架 1.业务与配置的分离 2.数据与程序的分离:数据的变更不影响程序 3.有日志功能,实现无人值守 4.自动发送测试报告 5.不懂编程的测试人员也可以进行测试 正常接口测试的流程 ...

  4. python web自动化测试框架搭建(功能&接口)——接口用例实现

    测试用例基类: # coding=utf-8 import unittest import Logger log = Logger.Loger() class BaseCase(unittest.Te ...

  5. python web自动化测试框架搭建(功能&接口)——接口公共方法

    接口公共方法有:数据引擎.http引擎.Excel引擎 1.数据引擎:获取用例.结果检查.结果统计 # -*- coding:utf-8 -*- from XlsEngine import XlsEn ...

  6. python web自动化测试框架搭建(功能&接口)——接口测试模块

    Python接口测试采用python读取excel的方法,通过requests库发送请求和接收响应.模块有: Data:用于存放excel用例的,用例格式: iutil: 接口公共方法,数据引擎.ht ...

  7. python web自动化测试框架搭建(功能&接口)——通用模块

    1.通用模块: config.conf: 公共配置文件,配置报告.日志.截图路径,以及邮件相关配置 [report] reportpath = E:\workspace\WebAutomation\s ...

  8. python web自动化测试框架搭建(功能&接口)——环境搭建

    自动化测试框架一般需要实现以下通用功能 执行前准备 结束后清理 执行步骤输出 执行结果输出 错误.失败截图 测试报告 发送邮件 日志 需要的软件和python第三方库有: 通用: JDK Eclips ...

  9. python web自动化测试框架搭建(功能&接口)——功能测试模块

    功能测试使用selenium,模块有: 1.futil: 公共方法,如元素高亮显示 # coding=utf-8 """高亮显示元素""" ...

  10. python web自动化测试框架搭建(功能&接口)——测试用例执行和结果收集

    由于unittest框架中结果收集在不同文件中,所以此处重写结果收集方法,加入执行时间,失败信息,失败截图等 TestRunner.py # coding=utf-8 import sys impor ...

随机推荐

  1. umount 报错

    在umount时报错: [root@node1 ~]# umount /usbumount: /usb: target is busy. (In some cases useful info abou ...

  2. springboot 使用 dev tool 导致 CastException

    1.背景 项目使用了 Spring + shiro 实现 权限控制, 使用AOP 对 每个 Controller 进行 log 记录时,需要从 shiro 中 获取 username字段, 问题就这样 ...

  3. PHP 变量讲解

    PHP 变量 变量是用于存储信息的"容器": 实例 <?php $x=5; $y=6; $z=$x+$y; echo $z; ?> 运行实例 » 与代数类似 x=5y= ...

  4. IC行业常见用语

    https://www.cnblogs.com/yeungchie/ Active Devices 有源器件 MOSFET Metal-Oxide-Semicoductor Field-Effect ...

  5. luogu P4166 [SCOI2007]最大土地面积 凸包 旋转卡壳

    LINK:最大土地面积 容易想到四边形的边在凸包上面 考虑暴力枚举凸包上的四个点计算面积. 不过可以想到可以直接枚举对角线的两个点找到再在两边各找一个点 这样复杂度为\(n^3\) 可以得到50分. ...

  6. 4.22 省选模拟赛 三元组 manacher 回文自动机

    容易发现可以枚举j 那么只需要计算出 l~j这段是回文串的l的和 以及j+1~r这段是回文串的r的和. 可以manacher 之后想要求出以j为右端点的回文串左端点的和 这个东西我们通过某个点为中心的 ...

  7. 没用过消息队列?一文带你体验RabbitMQ收发消息

    人生终将是场单人旅途,孤独之前是迷茫,孤独过后是成长. 楔子 先给大家说声抱歉,最近一周都没有发文,有一些比较要紧重要的事需要处理. 今天正好得空,本来说准备写SpringIOC相关的东西,但是发现想 ...

  8. 线性DP 学习笔记

    前言:线性DP是DP中最基础的.趁着这次复习认真学一下,打好基础. ------------------ 一·几点建议 1.明确状态的定义 比如:$f[i]$的意义是已经处理了前$i个元素,还是处理第 ...

  9. JDBC报错:Cannot find class: com.mysql.jdbc.Driver

    连接数据库的jar出现异常(通常报错:Cannot find class:com.mysql.jdbc.Drive), 问题:Connector的jar已经导入,还是出现 Cause: java.sq ...

  10. Serverless无服务器架构详解

    本文对Serverless架构的基础概念.具体产品.应用场景.工作原理进行详细解析. 基础概念 Serverless: 无服务器架构,即在无需管理服务器等底层资源的情况下完成应用的开发和运行,是云原生 ...