python接口自动化24-有token的接口项目使用unittest框架设计
获取token
在做接口自动化的时候,经常会遇到多个用例需要用同一个参数token,并且这些测试用例跨.py脚本了。
一般token只需要获取一次就行了,然后其它使用unittest框架的测试用例全部调用这个参数,那么如何实现呢?
虽然python里面有个全局变量global,但这个只是针对于在同一个.py里才有效,跨脚本就不起作用了。
解决思路
- 1.首先把公共数据单独抽出来,用一个文件去管理,如yaml文件
- 2.写一个读yaml文件的get_token()函数放到a.py,去读取需要的数据
- 3.其它脚本全部调用a.py里面的get_token()函数,然后传参
- 4.token动态获取可以写个登录函数放到run.py,获取到之后把token值写入到yaml文件,这样保证每次token都是最新的
- 5.run.py里面在运行所有用例之前先登录一次并写入token到yaml,然后执行所有用例,出报告结果
设计结构如下
yaml配置
1.公共参数我们可以写入到一个单独的配置文件里,这里配置文件我用的yaml来管理数据
读取token
1.写个读取yaml文件里面的token值的函数,放到re_token.py,代码如下:
# coding:utf-8
import yaml
import os
# 作者:上海-悠悠 QQ交流群:588402570
cur = os.path.dirname(os.path.realpath(__file__))
def get_token(yamlName="token.yaml"):
'''
从token.yaml读取token值
:param yamlName: 配置文件名称
:return: token值
'''
p = os.path.join(cur, yamlName)
f = open(p)
a = f.read()
t = yaml.load(a)
f.close()
return t["token"]
if __name__ =="__main__":
print(get_token())
测试用例token参数关联
1.经常用人问token如何参数关联,问这种问题的,基本上没认真学过python,估计平常写的代码都是东拼西凑到处复制过来的。
2.token的参数关联用一个中间变量【token】去接收上一步【get_token()函数)】获取的token值就行了,再传入到需要的地方,so easy!
3.以下代码是test_01和test_02里面写入的演示案例
# coding:utf-8
import unittest
from common.re_token import get_token
# 作者:上海-悠悠 QQ交流群:588402570
class Test_01(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.token = get_token()
print("获取到当前用例token值:%s" % cls.token)
def test_01(self):
'''测试用例1'''
body1 = {
"a": "111111",
"b": "111111",
"token": self.token # 参数关联
}
print("用例1body:%s" % body1)
def test_02(self):
'''测试用例2'''
body1 = {
"a": "222222",
"b": "2222222",
"token": self.token # 参数关联
}
print("用例2body:%s" % body1)
if __name__ == "__main__":
unittest.main()
4.执行结果:
..
获取到当前用例token值:yoyoketang
用例1body:{'token': 'yoyoketang', 'a': '111111', 'b': '111111'}
用例2body:{'token': 'yoyoketang', 'a': '222222', 'b': '2222222'}
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
执行策略
1.单个脚本运行没问题了,那么如果一次性执行多个用例脚本,都调用同一个token值呢?run.py脚本参考如下
# coding=utf-8
import unittest
import os
import yaml
from common import HTMLTestRunner_cn
from ruamel import yaml
curpath = os.path.dirname(os.path.realpath(__file__))
# 作者:上海-悠悠 QQ交流群:588402570
def login(user="yoyo", psw="123456"):
'''
先执行登录,传账号和密码两个参数
:return: 返回token值
'''
print("登录的账号名称:%s" % user)
p = psw
print("输入的密码:**********")
token = "xxxxxxxxx" # 登录后获取到的token值
return token
def write_yaml(value):
'''
把获取到的token值写入到yaml文件
:param value:
:return:
'''
ypath = os.path.join(curpath, "common", "token.yaml")
print(ypath)
# 需写入的内容
t = {"token": value}
# 写入到yaml文件
with open(ypath, "w", encoding="utf-8") as f:
yaml.dump(t, f, Dumper=yaml.RoundTripDumper)
def all_case(rule="test*.py"):
'''加载所有的测试用例'''
case_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "case")
# 定义discover方法的参数
discover = unittest.defaultTestLoader.discover(case_path,
pattern=rule,
top_level_dir=None)
return discover
def run_case(all_case, reportName="report"):
'''
执行所有的用例, 并把结果写入HTML测试报告
'''
curpath = os.path.dirname(os.path.realpath(__file__))
report_path = os.path.join(curpath, reportName) # 用例文件夹
# 如果不存在这个report文件夹,就自动创建一个
if not os.path.exists(report_path):os.mkdir(report_path)
report_abspath = os.path.join(report_path, "result.html")
print("report path:%s"%report_abspath)
fp = open(report_abspath, "wb")
runner = HTMLTestRunner_cn.HTMLTestRunner( stream=fp,
verbosity=2,
title=u'自动化测试报告,测试结果如下:',
description=u'用例执行情况:')
# 调用add_case函数返回值
runner.run(all_case)
fp.close()
if __name__ == "__main__":
token = login("admin", "111111") # 1.登录
write_yaml(token) # 2.写入yaml
allcases = all_case() # 3.加载用例
run_case(allcases)
2.执行完之后再report文件下生产一个测试报告
代码下载
完整代码可以在QQ群文件下载,QQ群:588402570
---------------------------------python接口自动化完整版-------------------------
全书购买地址 https://yuedu.baidu.com/ebook/585ab168302b3169a45177232f60ddccda38e695
也可以关注下我的个人公众号:yoyoketang
python接口自动化24-有token的接口项目使用unittest框架设计的更多相关文章
- python接口自动化-有token的接口项目使用unittest框架设计
获取token 在做接口自动化的时候,经常会遇到多个用例需要用同一个参数token,并且这些测试用例跨.py脚本了. 一般token只需要获取一次就行了,然后其它使用unittest框架的测试用例全部 ...
- python接口自动化(四十二)- 项目结构设计之大结局(超详解)
简介 这一篇主要是将前边的所有知识做一个整合,把各种各样的砖块---模块(post请求,get请求,logging,参数关联,接口封装等等)垒起来,搭建一个房子.并且有很多小伙伴对于接口项目测试的框架 ...
- python+selenium自动化软件测试(第3章):unittest
3.1 unittest简介 前言(python基础比较弱的,建议大家多花点时间把基础语法学好,这里有套视频,可以照着练习下:http://pan.baidu.com/s/1i44jZdb 密码:92 ...
- python接口自动化21-规范的API接口文档示例
前言 接口文档到底长啥样?做接口测试最大的障碍在于没有接口文档,很多公司不注重接口文档的编写,导致测试小伙伴没见过接口文档. 运气好一点的测试小伙伴可能厚着脸皮找开发要过接口文档,然而拿过来的接口文档 ...
- Python接口自动化——文件上传/下载接口
〇.前言 文件上传/下载接口与普通接口类似,但是有细微的区别. 如果需要发送文件到服务器,例如:上传文档.图片.视频等,就需要发送二进制数据,上传文件一般使用的都是 Content-Type: mul ...
- Selenium基于Python web自动化基础二 -- 免登录、等待及unittest单元测试框架
一.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...
- 接口自动化-python unittest+requests+HTMLrunner
从2015年毕业入行软件测试,快满4年了,之前技术分享都在百度贴吧上面,现在正式开始在博客中记录工作技术,努力成长,加油 接口测试的步骤1.组装好该接口需要的参数数据2.使用get或post附带参数数 ...
- Python+Pytest+Allure+Git+Jenkins接口自动化框架
Python+Pytest+Allure+Git+Jenkins接口自动化框架 一.接口基础 接口测试是对系统和组件之间的接口进行测试,主要是效验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系. ...
- 【python接口自动化】- 正则用例参数化
我们在做接口自动化的时候,处理接口依赖的相关数据时,通常会使用正则表达式来进行提取相关的数据. 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达式.常规表示法(Regular Ex ...
随机推荐
- 彻底卸载sql2008后重新安装
彻底卸载sql2008方法 --打开控制面板,在控制面板中卸载所有带sql server的程序. --删除C:\Program Files\Microsoft SQL Server这整个文件夹, -- ...
- 参数化SQL语句
避免SQL注入的方法有两种:一是所有的SQL语句都存放在存储过程中,这样不但可以避免SQL注入,还能提高一些性能,并且存储过程可以由专门的数据库管理员(DBA)编写和集中管理,不过这种做法有时候针对相 ...
- javascript输入验证数字方法,适合充值时输入正整数验证
说明:用于验证正整数的输入,不允许输入其他字符. html: <input type="text" id="sell_jobNum" name=" ...
- memory_get_usage()查看PHP脚本使用内存
memory_get_usage()可以查看当前php使用的内存大小.对于优化算法提高内存使用效率还是很实用的,尤其是对当下的移动端程序. <?php echo memory_get_usage ...
- 使用Generator(小黑鸟)反向生成Java项目(IDEA + Maven)
一.生成Maven项目 二.配置pom.xml文件 通用代码 <properties> <!-- 设置项目编码编码 --> <project.build.sourceEn ...
- 个人博客www.0x002.com
cnblogs只是相当于一个备份,感兴趣的读者赏脸关注下.
- 详谈 Spring 中的 IOC 和 AOP
这篇文章主要讲 Spring 中的几个点,Spring 中的 IOC,AOP,下一篇说说 Spring 中的事务操作,注解和 XML 配置. Spring 简介 Spring 是一个开源的轻量级的企业 ...
- Winform 串口通讯之地磅
继上次的读卡之后,要做一个地磅的读取. 下面是我在读卡Demo上改的读取地磅的. 地磅是一直向串口发送数据的,所以需要截取数据来一直判断数据是否合法,然后计算出结果. 其中遇到了一个小问题,文末有介绍 ...
- bzoj 4573: [Zjoi2016]大森林 lct splay
http://www.lydsy.com/JudgeOnline/problem.php?id=4573 http://blog.csdn.net/lych_cys/article/details/5 ...
- hdu 2732 最大流 **
题意:题目是说一个n*m的迷宫中,有每个格子有柱子.柱子高度为0~3,高度为0的柱子是不能站的(高度为0就是没有柱子)在一些有柱子的格子上有一些蜥蜴,一次最多跳距离d,相邻格子的距离是1,只要跳出迷宫 ...