yaml模块管理用例,单元测试unittest+数据驱动(yml),html报告

1.yaml 可以用来做数据驱动,比较灵活

import yaml   #用来读配置文件的比如file文件 文件以yaml和yml结尾   这种格式写用例比较容易处理,字典方便取值 取不到就没有不报错,主要是灵活。

f = open('login.yaml',encoding='utf-8')
res = yaml.load(f) #加载读出文件 将键值对转化为字典
print(res)

比如:login.yml
-  #是list的写法  可以防止字典相同的key覆盖
url : /api/user/login
method : post
detail : 正常登录
data :
username : niuhanyang
passwd : aA123456
check :
- userId
- sign

-
url : /api/user/login
method : post
detail : 密码错误
data :
username : niuhanyang
passwd : aA12333
check :
- 密码错误

-
url : /api/user/login
method : post
detail : 不传密码
data :
username : niuhanyang
check :
- 必填参数未填
2.单元测试
import unittest    #单元测试模块
import HTMLTestRunner #用来生成报告用
from BeautifulReport import BeautifulReport as bf #好看的测试报告 bf是别名方便使用
class TestCalc(unittest.TestCase): #继承 变为测试用例
def setUp(self):
print('setup是啥时候运行的')
#每个用例运行之前运行的 可以作为后续的前提条件
def tearDown(self):
print('teardown是啥时候运行')
#每个用例运行之后运行的 可以在收尾做比如删除数据的操作。
@classmethod #定义类方法
def setUpClass(cls): #直接继承父类方法
#在所有用例执行之前运行的
print('什么时候运行的setupclss')

@classmethod
def tearDownClass(cls):
#在所有用例都执行完之后运行的
print('什么时候运行的teardownclass')

def testliuwei(self): #用例执行顺序是按照首字母的顺序(在报告中可看出)
'''刘伟测试''' #通过‘’‘来加入用例描述 报告中就会加入用例描述
print('刘伟')
self.assertEqual(1,1) #该子类没有 继承父类比较两个值 后面也可以再加参数作为提示信息。
def testzch(self): #以test开头就可以运行用例 否则不会自动运行
'''赵传慧测试'''
print('赵传慧')
self.assertEqual(1,2)
def testa(self):
print('testa')
self.assertEqual(1,1)
def testc(self):
print('testc')
self.assertEqual(1,2)


# unittest.main() #会运行当前python文件里面的所有测试用例 **运行时注意run 产生报告时不用该模式

将用例产生报告主要有以下几个步骤
# 1、先把所有的测试用例都放到用例集。用例集也做测试套件是用来存放测试用例的
#2、运行这些测试用例
#3、产生报告
suite = unittest.TestSuite() #测试集合 存放用例 其实是一个list
suite.addTest( unittest.makeSuite(TestCalc) ) #把刚才写的用例加进来 **写入类名

bf报告生成
run = bf(suite) #实例化一下,他是一个类必须实例化使用
run.report(description='描述必须写',filename='test') #还可指定log位置等

HtmlTESTRunner如何产生报告
# f = open('test.html','wb') #以2进制模式 不考虑编码集的问题
# runner = HTMLTestRunner.HTMLTestRunner(f,title='双鱼座用例标题',description='这是用例描述') #后面两个参数是非必须的
# runner.run(suite) #运行用例

3.利用yaml做数据驱动来做测试接口

import unittest,requests

import ddt  #   #可做参数化  自动读文件中数据

from BeautifulReport import BeautifulReport as bf

from urllib import parse

@ddt.ddt  #申明这个类要别ddt使用啦

class Login(unittest.TestCase):

         base_url = 'http://118.24.3.40/'   #为给url统一加前缀   可写入配置文件比较好

         @ddt.file_data('login.yaml')#ddt帮你读文件,获取文件内容,循环调用函数,并且传给下面函数的如kwargs中,有多少条数据循环调用多少次下面的函数  注意修改文件open源码加入utf8编码打开不报

         def test_request(self,**kwargs):

                   detail = kwargs.get('detail','没写用例描述')  # '''和%s组合来描述用例在这里无效。

                   self._testMethodDoc = detail  #动态的用例描述

                   url = kwargs.get('url')#url

                   url = parse.urljoin(self.base_url,url)#拼接好url  只能拼接 比如关于/的问题处理

                   method = kwargs.get('method','get')#请求方式给他一个默认值get  防止没有传请求方式

                   data = kwargs.get('data',{}) #请求参数

                   header = kwargs.get('header',{})#请求头

                   cookie = kwargs.get('cookie',{})#cookie

                   check = kwargs.get('check')

                   method = method.lower() #便于处理

                   try:

                            if method=='get':

                                     res = requests.get(url,params=data,cookies=cookie,headers=header).text

                                     #因为接口有异常的情况下, 可能返回的不是json串,会报错

                            else:

                                     res = requests.post(url,data=data,cookies=cookie,headers=header).text

                   except Exception as e:

                            print('接口请求出错')

                            res = e

                   for c in check:

                            self.assertIn(c,res,msg='预计结果不符,预期结果【%s】,实际结果【%s】'%(c,res))    #查看是否包含 断言查看一次错误就停止,后面加如错误提示  但check在yml中得是list方便查看是否包含。

 

sutie = unittest.TestSuite()

sutie.addTest(unittest.makeSuite(Login))#添加用例

run = bf(sutie)  #实例化

run.report('login_test','登录测试用例')

print(run.success_count) #通过的次数

print(run.failure_count)  #失败的次数

思考?

# 1、运行的用例条数是不是和你的用例数一样

# 2、看看有没有其他不对的地方

posted on 2018-06-04 23:30  软测小白6v 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/cslw5566/p/9136569.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值