获取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框架设计的更多相关文章

  1. python接口自动化-有token的接口项目使用unittest框架设计

    获取token 在做接口自动化的时候,经常会遇到多个用例需要用同一个参数token,并且这些测试用例跨.py脚本了. 一般token只需要获取一次就行了,然后其它使用unittest框架的测试用例全部 ...

  2. python接口自动化(四十二)- 项目结构设计之大结局(超详解)

    简介 这一篇主要是将前边的所有知识做一个整合,把各种各样的砖块---模块(post请求,get请求,logging,参数关联,接口封装等等)垒起来,搭建一个房子.并且有很多小伙伴对于接口项目测试的框架 ...

  3. python+selenium自动化软件测试(第3章):unittest

    3.1 unittest简介 前言(python基础比较弱的,建议大家多花点时间把基础语法学好,这里有套视频,可以照着练习下:http://pan.baidu.com/s/1i44jZdb 密码:92 ...

  4. python接口自动化21-规范的API接口文档示例

    前言 接口文档到底长啥样?做接口测试最大的障碍在于没有接口文档,很多公司不注重接口文档的编写,导致测试小伙伴没见过接口文档. 运气好一点的测试小伙伴可能厚着脸皮找开发要过接口文档,然而拿过来的接口文档 ...

  5. Python接口自动化——文件上传/下载接口

    〇.前言 文件上传/下载接口与普通接口类似,但是有细微的区别. 如果需要发送文件到服务器,例如:上传文档.图片.视频等,就需要发送二进制数据,上传文件一般使用的都是 Content-Type: mul ...

  6. Selenium基于Python web自动化基础二 -- 免登录、等待及unittest单元测试框架

    一.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...

  7. 接口自动化-python unittest+requests+HTMLrunner

    从2015年毕业入行软件测试,快满4年了,之前技术分享都在百度贴吧上面,现在正式开始在博客中记录工作技术,努力成长,加油 接口测试的步骤1.组装好该接口需要的参数数据2.使用get或post附带参数数 ...

  8. Python+Pytest+Allure+Git+Jenkins接口自动化框架

    Python+Pytest+Allure+Git+Jenkins接口自动化框架 一.接口基础 接口测试是对系统和组件之间的接口进行测试,主要是效验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系. ...

  9. 【python接口自动化】- 正则用例参数化

    ​ 我们在做接口自动化的时候,处理接口依赖的相关数据时,通常会使用正则表达式来进行提取相关的数据. ​ 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达式.常规表示法(Regular Ex ...

随机推荐

  1. javascript重要类方法笔记

    三.数据结构和map    1.大括号数据结构:{}        1.1 键值对形式,类似Map           1.2 var treeNode={};            treeNode ...

  2. CCF CSP 201403-4 无线网络

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201403-4 无线网络 问题描述 目前在一个很大的平面房间里有 n 个无线路由器,每个无线路 ...

  3. 何时调用getView?——从源码的角度给出解答

    先来看ListView类中的makeAndAddView方法: 没有数据变化:从mRecycler中取得可视的view 数据有变化:obtainView /** * 获取视图填充到列表的item中去, ...

  4. CF455D. Serega and Fun

    D. Serega and Fun time limit per test 4 seconds memory limit per test 256 megabytes input standard i ...

  5. 黑马程序员_java基础笔记(03)...面向对象

    ——————————  ASP.Net+Android+IOS开发..Net培训.期待与您交流!—————————— 1:面向对象的概念,2 : 类和对象的关系,3 : 封装,4 : 构造函数,5 : ...

  6. Spring Boot 教程demo

    https://github.com/ityouknow/spring-boot-examples

  7. Oracle登录

    一.安装Oracle 二.打开Database Configuration Assistant 三.打开SQL Plus 1.打开SQL Plus 2.输入用户名sys 3.输入口令1 as sysd ...

  8. ZOJ 4010 Neighboring Characters(ZOJ Monthly, March 2018 Problem G,字符串匹配)

    题目链接  ZOJ Monthly, March 2018 Problem G 题意  给定一个字符串.现在求一个下标范围$[0, n - 1]$的$01$序列$f$.$f[x] = 1$表示存在一种 ...

  9. JQuery实现最字体的放大缩小

    网页常常有对字体放大缩小的需求,我们不妨来看一下下面这段JQuery代码的实现. 假如在html页面代码中我们有这么一段代码: <p>啦啦啦啦啦啦啦啦啦啦</p> 那么JQue ...

  10. 自然语言处理系列-4条件随机场(CRF)及其tensorflow实现

    前些天与一位NLP大牛交流,请教其如何提升技术水平,其跟我讲务必要重视“NLP的最基本知识”的掌握.掌握好最基本的模型理论,不管是对日常工作和后续论文的发表都有重要的意义.小Dream听了不禁心里一颤 ...