接续前文,在上篇博客中我们编写了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. MyBatis Plus 导入IdType失败

    import com.baomidou.mybatisplus.annotation.IdType; 修正Entity模板IdType引入包名到com.baomidou.mybatisplus.enu ...

  2. XML--概念、约束、解析

    概念 XML:可扩展标记语言 HTML:超文本标记语言 两者的区别: 1.语法结构类似,单语法要求不同 HTML不区分大小写,XML严格区分大小写 在HTML中,有时不严格,如果上下文清楚地显示出段落 ...

  3. nrm安装使用(mac)

    在开发工作中时常有需要切换npm源的需求以及更换node版本的情况,这两种情况都有对应的管理器来使用 一.nrm nrm是一个npm源管理工具,使用它可以快速切换npm源. 1.nrm安装(全局安装) ...

  4. 国内安装Homebrew

    原文链接更详细 命令 $ /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew. ...

  5. 两数相加(B站看视频总结)

    ''' 两数相加: 给出两个 非空 的链表用来表示两个非负的整数 各自的位数是按照逆序的方式存储的 每一个节点只能保存 一位数 示例: 输入:(2->4->3) + (5->6-&g ...

  6. 小甲鱼零基础汇编语言学习笔记第五章之[BX]和loop指令

         这一章主要介绍什么是[BX]以及loop(循环)指令怎么使用,loop和[BX]又怎么样相结合,段前缀又是什么鬼,以及如何使用段前缀.   1.[BX]的概念      [BX]和[0]类似 ...

  7. luogu P2510 [HAOI2008]下落的圆盘

    LINK:下落的圆盘 计算几何.n个圆在平面上编号大的圆将编号小的圆覆盖求最后所有没有被覆盖的圆的边缘的总长度. 在做这道题之前有几个前置知识. 极坐标系:在平面内 由极点 极轴 和 极径组成的坐标系 ...

  8. linux的文件处理(匹配 正则表达式 egrep awk sed)和系统、核心数据备份

    文件处理 1.处理方式 匹配 正则表达式 egrep awk sed 2.文件中的处理字符 \n  新行符 换行 \t  制表符 tab键 缺省8个空格 \b  退格符 backspace键 退格键 ...

  9. linux的用户扩充权限管理acl和用户使用系统资源的限制

    用户扩充权限管理 acl 1.扩充权限的方式 文件扩充权限 ACL 磁盘配额 2.文件扩充权限 1.安全位 安全位   ---set位    SUID  SGID   set仅可以加给 u.g, 如: ...

  10. python网络爬虫实战PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书

    点击获取提取码:vg1y python网络爬虫实战帮助读者学习Python并开发出符合自己要求的网络爬虫.网络爬虫,又被称为网页蜘蛛,网络机器人,是一种按照一定的规则,自动地抓取互联网信息的程序或者脚 ...