当前位置: 首页 > news >正文

python接口自动化测试(单元测试方法)

一、环境搭建

  •  python +unittest+ requests实现http请求的接口自动化
  • Python的优势:语法简洁优美, 功能强大, 标准库跟第三方库灰常强大,建议大家事先了解一下Python的基础;
  • unittest是python的标准测试库,相比于其他测试框架是python目前使用最广的测试框架。
  • Requests 是用Python语言编写,基于urllib,采用Apache2 Licensed开源协议的HTTP 库。它比urllib 更加方便,可以节约我们大量的工作,完全满足HTTP 测试需求。
  • 在CMD命令行执行命令加载request第三方库:pip install requests
  •  python -m pip install pillow

二、方法

  • pip安装requests第三方库,然后引入:import requests
  • 引入json标准库,美化json输出:import json
  • 调用requests库中的post方法,会给出所需要的参数,传入上面定义的url和data参数,运行.py文件就执行了post请求。
import requests    #pip安装requests第三方库,然后引入
import json             #引入json标准库,美化json输出url = 'http://***/account/login'
data = {"username":"***01","password":"password",
}result = requests.post(url,data).json()  #以json格式输出
print(result)
result = requests.post(url,data).text     #以源码形式输出
print(result)
import requests#引入requests第三方包
import json#引入json包class Login():def httprequests(self,url,data,method):#self为类函数的默认函数,放在第一位if method=="post":res=requests.post(url,data)#post请求方法else:res=requests.get(url,data)#get请求方法print(res.text)#以源码形式输出print(res.json())#以json形式输出#创建实例,调用函数
test1=Login()
login_url='https://www.******/pc/member/sign'
login_data={"flag":"mobile","password":"f5e05a41724115d076bfb1fd2bd9613e","mobile_phone":"136********"}
login_method='post'
test1.httprequests(login_url,login_data,login_method)

三、单元测试

  • 什么是单元测试:单元测试就是对代码进行测试,本质就是对类或者函数进行测试
  • 什么时候进行单元测试:代码完成后就开始进行测试
  • 由谁进行单元测试:一般有开发自己进行测试
  • 目的:尽可能早的介入测试,发现底层代码中的问题
  • 方法:使用unittest方法包:import unittest  

 (1)先创建一个加法类-Mathmethod,存入Mathmethod.py文件

#定义一个数学加法类
class Mathmethod():def add(self,a,b):return(a+b)def sub(self,a,b):return(a-b)

(2)然后创建测试用例-TestMathmethod

import unittest
from HTMLTestRunner import HTMLTestRunner
from requesttest.math.Mathmethod import Mathmethod  # 引入Mathmethod模块
#import HTMLTestRunnerNewclass TestMathmethod(unittest.TestCase):#创建TestMathmethod类,继承unittest.TestCase方法#编写测试用例,函数命名必须以test_开头def test_add_two_num(self):res=Mathmethod().add(3,6)print('两个数值相加结果是',res)self.assertEqual(9,res)def test_sub_two_num(self):res=Mathmethod().sub(9,8)print('两个数值相减结果是', res)self.assertEqual(1,res)

(3)创建测试报告-使用HTML方法

import unittest
from HTMLTestRunner import HTMLTestRunner
from requesttest.math.TestMathmethod import TestMathmethodtestunit=unittest.TestSuite()#生成单元测试流程
testunit.addTest(TestMathmethod("test_add_two_num"))
testunit.addTest(TestMathmethod("test_sub_two_num"))#加载一条测试用例
fp=open('D:\\test\\unittest1.html','wb')#创建测试报告,以写的方式存入某个路径
runner=HTMLTestRunner(stream=fp,title="加法测试",description="用例执行情况:")
runner.run(testunit)
fp.close()

 (4)也可使用txt的形式输出测试报告

import unittest
from HTMLTestRunner import HTMLTestRunner
from requesttest.math.TestMathmethod import TestMathmethodsuite=unittest.TestSuite()#收集测试用例
loader=unittest.TestLoader()#加载测试用例-按照类的方法添加一个类下面的所有测试用例
suite.addTest(loader.loadTestsFromTestCase(TestMathmethod))
file=open('test_case.txt','w+')#测试报告的存储路径和测试报告的读写方式
runner=unittest.TextTestRunner(stream=file,verbosity=2,#测试报告的详细程度
)
runner.run(suite)#执行测试用例
test_add_two_num (requesttest.math.TestMathmethod.TestMathmethod) ... ok
test_sub_two_num (requesttest.math.TestMathmethod.TestMathmethod) ... ok----------------------------------------------------------------------
Ran 2 tests in 0.000sOK
(5)生成测试报告方法三(HTML的方式)
 
import unittest
from HTMLTestRunner import HTMLTestRunner
from requesttest.math.TestMathmethod import TestMathmethodsuite=unittest.TestSuite()#收集测试用例
loader=unittest.TestLoader()#加载测试用例
suite.addTest(loader.loadTestsFromTestCase(TestMathmethod))fp=open('D:\\test\\unittest1.html','wb')#创建测试报告,以写的方式存入某个路径
runner=HTMLTestRunner(stream=fp,title="加法测试",description="用例执行情况:")
runner.run(suite)
fp.close()


             【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图】


一、Python编程入门到精通


二、接口自动化项目实战 

三、Web自动化项目实战


四、App自动化项目实战 

五、一线大厂简历


六、测试开发DevOps体系 

七、常用自动化测试工具


八、JMeter性能测试 

九、总结(尾部小惊喜)

生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!

生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!

只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关文章:

  • 【UE5.1 MetaHuman】使用mixamo_converter把Mixamo的动画重定向给MetaHuman使用
  • Android多进程和跨进程通讯方式
  • 频谱论文:面向频谱地图构建的频谱态势生成技术研究
  • oracle aq java jms使用(数据类型为XMLTYPE)
  • 使用AppleScript自动滚动预览
  • 关于“Python”的核心知识点整理大全26
  • 【数据结构】八大排序之直接插入排序算法
  • 正则表达式入门与实践
  • C 库函数 - time()
  • 06 Rust 枚举类
  • dapper使用Insert或update时部分字段不映射到数据库
  • 什么是Symbol?在实际开发中怎么用?
  • 软件设计师——信息安全(一)
  • java.lang.ClassNotFoundException:javax.xml.bind.DatatypeConverter 报错解决
  • 数据库原理与应用——简答题练习(数据管理技术发展、数据库主要特征、数据模型、关系模型、实体性之间的关系、DBMS的功能、相关术语解释、数据库系统)
  • [译]如何构建服务器端web组件,为何要构建?
  • ES10 特性的完整指南
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Git学习与使用心得(1)—— 初始化
  • input实现文字超出省略号功能
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • JavaWeb(学习笔记二)
  • JS题目及答案整理
  • KMP算法及优化
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • React Transition Group -- Transition 组件
  • React组件设计模式(一)
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • - 概述 - 《设计模式(极简c++版)》
  • 给github项目添加CI badge
  • 深度解析利用ES6进行Promise封装总结
  • 算法之不定期更新(一)(2018-04-12)
  • 微信小程序开发问题汇总
  • ​马来语翻译中文去哪比较好?
  • #、%和$符号在OGNL表达式中经常出现
  • #if #elif #endif
  • #stm32驱动外设模块总结w5500模块
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (003)SlickEdit Unity的补全
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (二)linux使用docker容器运行mysql
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (六)c52学习之旅-独立按键
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (三)uboot源码分析
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET Core 版本不支持的问题
  • .net core 连接数据库,通过数据库生成Modell
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET 使用 XPath 来读写 XML 文件
  • .net 托管代码与非托管代码