由浅入深----python+requests+unittest执行自动化接口测试

  • 一、安装requests、xlrd、json、unittest库
    • 1.pip 命令安装:
    • 2.pycharm里安装
  • 二、利用Page Object Model 设计理念创建六类Python Package(也可根据项目要求具体实施)
  • 三、先在base包里创建一个Base_Page.py
    • 1.导入模块,并创建Base类,封装各类请求方法:
    • 2.适配于接口用例执行,读取Excel表时,将各类请求做判断,当符合哪一种时,就去执行哪一种
    • 3.将几种请求做简单调试,调试通了,那么我们就可以进行下一项
  • 四、再common类下创建commons.py文件,并创建common类
    • 1.封装日志方法
    • 2.封装读取Excel表方法,把他转换成字典形式,方便json格式读取
    • 3.封装一个生成HTML报告方法
  • 五、在case包下创test用例,并调用我们在base页封装好的请求api以及common中的读取Excel数据表联合使用
    • 1.创建test_login.py
    • 2.导入unittest、common类下的commons类、ddt数据驱动、Base下的base_page页
    • 3.搭建unittest框架内部,并填充方法
    • 4.执行用例后生成测试报告:
    • 5.copy当前要执行的脚本路径,添加到运行方式为python里
    • 6.看下生成的测试报告

一、安装requests、xlrd、json、unittest库

1.pip 命令安装:

pip install requests
pip install xlrd
pip install json
pip install unittest

2.pycharm里安装

二、利用Page Object Model 设计理念创建六类Python Package(也可根据项目要求具体实施)

三、先在base包里创建一个Base_Page.py

1.导入模块,并创建Base类,封装各类请求方法:

import requests  #导入requests模块
class Base():   def method_post(self,url,params = None,data = None,headers = None,files = None):return requests.post(url = url,params = params,data = data,headers = headers,files = files)def method_get(self,url,params = None,data = None,headers = None,files = None):return requests.get(url = url,params = params,data = data,headers = headers,files = files)def method_put(self,url,params = None,data = None,headers = None,files = None):return requests.put(url = url,params = params,data = data,headers = headers,files = files)def method_delete(self,url,params = None,data = None,headers = None,files = None):return requests.delete(url = url,params = params,data = data,headers = headers,files = files)

因为每一个请求都会有params参数或是data参数,但是不可能两个都存在,所以这里用了None,依次类推

2.适配于接口用例执行,读取Excel表时,将各类请求做判断,当符合哪一种时,就去执行哪一种

    def requests_type(self,method,url,params = None,data = None,headers = None,files = None):if method =='post' or method =='POST':return self.method_post(url = url,params = params,data = data,headers = headers,files = files)elif method =='get' or method =='GET':return self.method_get(url = url,params = params,data = data,headers = headers,files = files)elif method =='put' or method =='PUT':return requests.put(url = url,params = params,data = data,headers = headers,files = files)elif method =='delete' or method =='DELETE':return requests.delete(url = url,params = params,data = data,headers = headers,files = files)

3.将几种请求做简单调试,调试通了,那么我们就可以进行下一项


也可以对需要拿到cookie的接口进行封装方法保存:

    def Get_Login_cookie(self,data):res = self.method_post(url = "请求网址",data = data)return {"userId":str(res.json()['result']['userId']),"sessionId":res.json()['result']['sessionId']}

之后我们要将base页验证的这些代码做清除,否则的话永远都是调的这些接口

四、再common类下创建commons.py文件,并创建common类

1.封装日志方法

这里我添加了一个data包,用于存放xlrd表,以及html报告存放路径、log日志存放路径

import os
base_path = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
log_path  = base_path + os.sep + 'report' + os.sep + 'logs'
report_html = base_path + os.sep + 'html'
read_xlrd = base_path + os.sep + 'data'
class Common():#封装日志方法def get_logs(self,path = log_path):import logging,timelogs = logging.getLogger()logs.setLevel(logging.DEBUG)path = path+'/' + time.strftime('%Y-%m-%d-%H-%M-%S') + '.log'write_file = logging.FileHandler(path,'a+',encoding='utf-8')write_file.setLevel(logging.DEBUG)set_logs = logging.Formatter('%(asctime)s - %(filename)s - %(funcName)s - %(levelname)s - %(message)s')write_file.setFormatter(set_logs)pycharm_text = logging.StreamHandler()pycharm_text.setFormatter(set_logs)logs.addHandler(write_file)logs.addHandler(pycharm_text)return logs

2.封装读取Excel表方法,把他转换成字典形式,方便json格式读取

# 读取Excel表方法,方便后续读取接口用例数据def ReadExcelTypeDict(self,file_name,path = read_xlrd):path = path+'/' + file_nameimport xlrdwork_book = xlrd.open_workbook(path)  # 打开Excel表sheets = work_book.sheet_names()  # 获取所有的sheets页DatasList = []for sheet in sheets:sheets = work_book.sheet_by_name(sheet)nrows = sheets.nrowsfor i in range(0,nrows):values = sheets.row_values(i)DatasList.append(values)title_list = DatasList[0]content_list = DatasList[1:]new_list = []for content in content_list:dic = {}for i in range(len(content)):dic[title_list[i]] = content[i]new_list.append(dic)return new_list   #最终返回为字典形式 有键和值

为什么要转换格式呢?
这里就涉及到了怎么设计一个自动化接口用例


用例的参数值要用json格式写入,不要有空格
预期结果的出参也要用json格式写入
不要有’’ 值都要用""包起来

3.封装一个生成HTML报告方法

# 封装一个HTML报告方法def GetHtmlResult(self,suite,title,path = report_html):import HTMLTestReportCN,timepath = path + '/' + time.strftime('%Y-%m-%d-%H-%M-%S') + '.html'with open(path,'wb+') as f:run = HTMLTestReportCN.HTMLTestRunner(stream=f,description='用户相关接口测试报告',tester='小白',title = title)run.run(suite)

其余还有需要补充的可以继续添加,我这里三个基本够用

五、在case包下创test用例,并调用我们在base页封装好的请求api以及common中的读取Excel数据表联合使用

1.创建test_login.py

2.导入unittest、common类下的commons类、ddt数据驱动、Base下的base_page页

import unittest
import ddt
import 自动化接口测试.common.commons as common
from 自动化接口测试.base.Base_Page import Base

3.搭建unittest框架内部,并填充方法

import unittest
import ddt
import 自动化接口测试.common.commons as common
from 自动化接口测试.base.Base_Page import Base
r = common.Common().ReadExcelTypeDict('cezxhi .xlsx')  # 拿到具体的Excel表数据
@ddt.ddt  #导入ddt模块
class TestLogin(unittest.TestCase):@classmethoddef setUpClass(cls) -> None:  # setupclass类方法  全部用例开始前执行一次cls.logs = common.Common().get_logs() # 导入日志方法cls.logs.debug('开始写入接口自动化测试用例')@classmethoddef tearDownClass(cls) -> None:cls.logs.debug('自动化接口用例结束')def setUp(self) -> None:self.logs.debug('开始本条接口用例')def tearDown(self) -> None:self.logs.debug('结束本条用例')@ddt.data(*r) #  引入ddt模块,读取拿到的数据def test_logins(self,pars):  # 用例方法名开头必须已test  pars参数为接收的表数据值import json  #导入json模块dic = json.loads(pars['body参数值'])  # 将Excel数据中的参数值转变为json格式url = pars['接口地址']  # 拿到请求urlyuqi = pars['预期结果']  # 拿到预期结果fs = pars['请求方式'] # 拿到请求方式result = Base().requests_type(method = fs,url = url,data = dic)  # 填充base页的请求apiself.assertEqual(result.text,yuqi)  # 进行断言 看用例是否通过

4.执行用例后生成测试报告:

if __name__ == '__main__':load = unittest.TestLoader().loadTestsFromTestCase(TestLogin)  #使用loader加载方式 来找寻所有已test开头的用例suite = unittest.TestSuite([load,])common.Common().GetHtmlResult(suite,'登录测试用例')

5.copy当前要执行的脚本路径,添加到运行方式为python里



最后我们run一下


控制台是这样的

为什么会有400呢?因为有一些接口是异常的,比如url错误的,少传入参数、空参,所以会出错,常理之中

6.看下生成的测试报告

在pycharm中是这样的

然后我们copy下他的路径到浏览器中查看



根据我追踪的信息,第一条失败是因为sessionId是可以变的,每一次的值都是不一样,在这里也希望大家能够找到BUG,并妥善处理好每一个问题

祝大家生活愉快
有问题博客下方留言
小友定会尽全力回答

由浅入深----python+requests+unittest执行自动化接口测试相关推荐

  1. python requests+unittest+beautifulreport+jenkins实现接口自动化(上)

    众所周知,目前较为主流的接口自动化框架:httprunner3, pytest, unittest. 背景知识:httprunner3是基于pytest进行二开封装的,而pytest是基于unitte ...

  2. python+requests+unittest+HTMLTestRunner构建接口自动化测试框架(四)测试用例执行

    python+requests+unittest+HTMLTestRunner构建接口自动化测试框架(一)了解基础框架,读取配置文件 python+requests+unittest+HTMLTest ...

  3. python+requests+pytest 接口自动化框架(一)

    目录 一.Pytest详解以及常用的插件安装 二.Pytest默认的测试用例的规则 三.Pytest用例运行方式以及参数 1.命令行模式运行 命令:pytes 2.主函数模式运行 3.基于pytest ...

  4. python+requests+pytest 接口自动化框架(四)

    目录 一.requests库简介 二.requests库常用方法 三.request()返回的response对象 四.实战案例 post(url, data=None, json=None, **k ...

  5. 浅谈python+requests实现接口自动化

    前言 今年2月调去支持项目接口测试,测试过程中使用过postman.jmeter工具,基本能满足使用,但是部分情况下使用较为麻烦. 比如:部分字段存在唯一性校验或字段间有业务性校验,每次请求均需手工修 ...

  6. python+requests+unittest 接口ddt测试

    以数据驱动的形式,将用例维护在py文件中 源码分析: 变量定义 publicParameters.py """ 公共参数 , 按照各公司实情,自行编写 "&qu ...

  7. python requests+unittest+beautifulreport+jenkins实现接口自动化(下)

    现在来到了重点,test_case层. test_case层: 1,按照不同业务模块分文件夹存放,以: 业务模块名_test 命名文件夹.eg. order_test 注意:方便以后模糊匹配到所有以t ...

  8. python requests+unittest+beautifulreport+jenkins实现接口自动化(中)

    紧接上章,来继续聊一聊Service层 & Ddto层. Service层: 1,建议以研发的工程目录层次做参考,搭建对应的service层架构. 2,每个function作为一个接口录入,可 ...

  9. Python+Requests实现接口自动化

    一般对于自动化的理解,有两种方式的自动化. 第一,不需要写代码,完全由工具实现,这种方式的工具一般是公司自己研发的,方便黑盒测试人员使用.这种工具的特点是学习成本低,方便使用,但是通用性不强,也就是换 ...

最新文章

  1. 学会 IDEA REST Client后,postman就可以丢掉了...
  2. VS 2008 中内存泄露检查
  3. 原码补码反码概括简介
  4. Ext.Net学习笔记18:Ext.Net 可编辑的GridPanel
  5. 调查作业时,注意 【 调查深度 】 ,以及总结 【 中间成果物 】
  6. SQL Server 2012 完全安装
  7. 系统学习深度学习(三十八)--深度确定性策略梯度(DDPG)
  8. 生物信息学分析的常用软件
  9. expdp —— XDB SGA initialization
  10. c51编译器+linux,C51 开源编译器SDCC学习笔记-安装
  11. 短信网关协议(cmpp、sgip、smgp、smpp)长短信开发要点
  12. python依照概率抽样_统计概率思维之总体与抽样
  13. 【题解】DZY Loves Math
  14. 0x80070091-Win10系统还原时的救命办法
  15. 微型计算机键盘上的tab键汉语译为,微型计算机键盘上的Tab键汉语译为()。
  16. 转载:left join right join left outer join 区别
  17. Twig中控制保留小数位数
  18. MQ同类产品对比以及选型-RocketMq的背后故事
  19. 区块链修仙小说走红,刘慈欣的《三体》是其先驱?
  20. [网络配置] 使用有线网络连接局域网,使用无线网络连接互联网

热门文章

  1. 你是真的“C”——详解C语言函数模块知识(上篇)
  2. LightProxy 无线端代理iOS,安装验证证书后仍不生效
  3. String Shifting
  4. git init和git clone获取仓库 (一)
  5. day26_安卓基础之之Android介绍与入门
  6. hexeditor作用_Hex编辑器Free Hex Editor Neo
  7. Qt widget事件传递顺序以及监听特定控件是否接收某个事件
  8. 计算机网络知识点总结——第三章数据链路层
  9. 计算机学院考研动员大会,计算机科学学院召开考研动员大会暨经验分享会
  10. html浅色_修改CSS样式实现网页灰色(没有颜色只有浅色黑白)的几个方法整理