python接口自动化 一个变量 其他接口要用_python接口自动化-有token的接口项目使用unittest框架设计...

在做接口自动化的时候,经常会遇到多个用例需要用同一个参数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,然后执行所有用例,出报告结果

设计结构如下

1070438-20180704214938762-309231973.png

yaml配置

1.公共参数我们可以写入到一个单独的配置文件里,这里配置文件我用的yaml来管理数据

1070438-20180704210106655-1067956894.png

读取token

1.写个读取yaml文件里面的token值的函数,放到re_token.py,代码如下:

#coding:utf-8

importyamlimportos#作者:上海-悠悠 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

importyamlimportos#作者:上海-悠悠 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())

4.执行结果:

..

获取到当前用例token值:yoyoketang

用例1body:{'token': 'yoyoketang', 'a': '111111', 'b': '111111'}

用例2body:{'token': 'yoyoketang', 'a': '222222', 'b': '2222222'}----------------------------------------------------------------------Ran2 tests in0.000s

OK

执行策略

1.单个脚本运行没问题了,那么如果一次性执行多个用例脚本,都调用同一个token值呢?run.py脚本参考如下

#coding=utf-8

importunittestimportosimportyamlfrom common importHTMLTestRunner_cnfrom ruamel importyaml

curpath= os.path.dirname(os.path.realpath(__file__))#作者:上海-悠悠 QQ交流群:588402570

def login(user="yoyo", psw="123456"):'''先执行登录,传账号和密码两个参数

:return: 返回token值'''

print("登录的账号名称:%s" %user)

p=pswprint("输入的密码:**********")

token= "xxxxxxxxx" #登录后获取到的token值

returntokendefwrite_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)returndiscoverdef run_case(all_case, reportName="report"):'''执行所有的用例, 并把结果写入HTML测试报告'''curpath= os.path.dirname(os.path.realpath(__file__))

report_path= os.path.join(curpath, reportName) #用例文件夹

#如果不存在这个report文件夹,就自动创建一个

if notos.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文件下生产一个测试报告

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值