yaml文件、装饰器、unittest

1.yaml文件的读取

在xxx.yaml文件中写入以下内容:

-
method : post
url : http://***.***.**.**/api/user/login
data :
username : ****
password : 123456
headers :
cookie : sdfsdfsdfsf
user-agent : xxxxx
-
method : post
url : http://***.***.**.**/api/user/login
data :
username : ***
password : 123456
headers :
cookie : sdfsdfsdfsf
user-agent : xxxxx

读取xxx.yaml的数据信息代码为:
import yaml

f=open('xxx.yaml')
print(yaml.load(f))

读取到的信息为:

[{'data': {'username': '***', 'password': 123456}, 'url': 'http://***.***.**.**/api/user/login', 'method': 'post', 'headers': {'cookie': 'sdfsdfsdfsf', 'user-agent': 'xxxxx'}}, {'data': {'username': '****', 'password': 123456}, 'url': 'http://***.**.**.**/api/user/login', 'method': 'post', 'headers': {'cookie': 'sdfsdfsdfsf', 'user-agent': 'xxxxx'}}]

总结:只要遇到‘-’就会形成list的一个元素,遇到换行缩进就会形成一个字典元素

2.装饰器

# 装饰器  器指的就是函数,装饰函数的意思
# 在不改变原来函数调用方式、代码情况下,给函数增加新功能
# def taotao(name):
# print(name)
#
# ahuang=taotao
# 函数即变量,此时taotao没有加括号,即没有调用,把他当做一个变量来传递了
# ahuang('涛涛')和调用taotao(‘涛涛’)是一样的

def timer(func):
def add(*args,**kwargs): 写通用装饰器时,加上括号里的参数,可以兼容有传参的功能函数
print('开始挣钱')
res=func(*args,**kwargs)
return res 装饰器函数加上返回值,可以兼容有返回值的函数
return add

@timer 语法糖 效果等同于taotao=timer(taotao)
def taotao():
print('我是涛涛')
ahuang=timer(taotao)此时taotao=func,开始执行timer,首先定义add,然后返回,此时的ahuang=add
ahuang()调用add函数

那么把ahuang替换成taotao就相当于在不改变原来调用方式的情况下,给函数增加了新功能

3.单元测试unittest
# 测试用例
# 测试用例集合
# testrunner 帮你运行用例的

def calc(a,b):
return a//b

import BeautifulReport as br
import unittest
from unittest import TestCase
class MyTest(TestCase):#继承TestCase类
@classmethod
def setUpClass(cls):#所有用例执行之前运行它
print('我是setup class')
@classmethod
def tearDownClass(cls):#所有用例执行完之后运行它
print('我是teardown class')
def setUp(self): #每条用例运行之前都会执行它
print('setup 什么时候运行我呢')
def tearDown(self):#每条用例运行之后都会执行它
print('teardown 什么时候运行我呢')
def test_calc1(self):
'''这个用例是测试除法计算器正常的''' 在函数里面三个引号加注释,就是每条用例的描述信息
print('这是第一条用例')
res = calc(4,2)
self.assertEqual(2,res,'预期结果和实际结果不符合 预期结果是 2 实际结果是%s'%res) #预期结果和实际结果比较
def test_calc2(self):
'''除法计算器第二个部正常'''
res = calc(5,1)
print('第二条运行')
self.assertEqual(1,res) #断言 #a,b
unittest.main() #它可以帮你当前python文件里面的所有测试用例,测试用例的方法名称中必须以test为开头才会被认为是测试用例,用例的执行顺序以测试用例名称中的ascii码的先后顺序为准
test_suite =  unittest.TestSuite() #定义一个测试集合
#test_suite.addTest(MyTest('test_b')) #只加入某一个测试用例
test_suite.addTest(unittest.makeSuite(MyTest))#把类里面所有的用例都加到集合里面
#下面是不好看的报告
# f = open('report.html','wb')
# runner = HTMLTestRunner.HTMLTestRunner(stream=f, 写入到那个文件
# title='测试报告', 标题
# description='这个***的测试') 报告描述
# runner.run(test_suite)#运行哪个用例,此时不能用unittest.main(),这是两种运行方式
# f.close()
#下面是好看的报告

report = br.BeautifulReport(test_suite)

report.report(description='***测试',filename='report2.html')可以指定报告描述,报告文件名称(不用提前打开),还可以指定保存路径(如果不指定为当前路径)

print(report.failure_count) #失败的次数
print(report.success_count) #成功的次数

猜你喜欢

转载自www.cnblogs.com/kuhaha/p/9499205.html
今日推荐