码迷,mamicode.com
首页 > 其他好文 > 详细

基于代码驱动:处理有依赖关系接口

时间:2018-06-15 23:27:04      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:适合   redis   代码实现   class   的区别   隔离   用例   框架   区别   

数据驱动和代码驱动的区别:

  使用数据驱动好处:

    - 代码复用率高。同一测试逻辑编写一次,可以被多条测试数据复用,提高了测试代码的复用率,同时可以提高测试脚本的编写效率。

    - 异常排查效率高。测试框架依据测试数据,每条数据生成一条测试用例,用例执行过程相互隔离,在其中一条失败的情况下,不会影响其他的测试用例。
  缺点:但是数据驱动无法做到依赖,比如后续操作依赖登录产生的cookie,这样的很难实现

代码驱动:
测试用例全是用代码实现的
继续完善utp,让utp变成一个数据驱动和代码驱动都支持的框架
适合接口之间互相依赖,需要操作数据库,参数加密,操作redis
数据驱动:适合有大量的接口需要测试,接口之间互相不依赖
代码驱动:适合接口之间互相依赖,需要操作数据库,参数加密,操作redis

通常在测接口时,有些接口之间有依赖关系,并不是各自独立的。比如有些接口可能在访问的时候,首先要保证用户已登录,要用到用户的cookie信息。

像这样的接口在测试的时候,就要先进行登录接口的操作,获取到需要的cookie或session值,然后再进行测试。

举例:

比如现在测试一个抽奖接口。需要先登录,获取到登录接口返回的userid和sign字段的值。可以这样操作:

1、先写个登录函数,用来获取到登录接口返回的内容

    def login(self):
        url=/api/user/login
        real_url=parse.urljoin(BASE_URL,url)
        username,password=self.register()#获取到注册时的用户名和密码
        data={username:username,passwd:password}
        res=MyRequest.post(real_url,data)
        self.assertEqual(0, res.get(error_code), msg=登录失败)
        sign=res.get(login_info).get(sign)
        userid=res.get(login_info).get(userId)
        return userid,sign

2、在测试抽奖的时候,先调用登录函数login,获取到userid和sign,然后在作为参数传入抽奖接口

    def testchoice(self):
        ‘‘‘测试抽奖‘‘‘
        url = /api/product/choice
        real_url = parse.urljoin(BASE_URL, url)
        user_id, sign = self.login()#获取到userid和sign,需注意的是,因为此处会有调用登录的操作,所以上面的登录函数不需要加test前缀作为用例执行。要不然就会重复执行
        data = {userid: user_id, sign: sign}
        res = MyRequest.get(real_url, data)
        self.assertEqual(0, res.get(error_code), msg=抽奖接口调用失败)

因为在unittest中,只要类继承了unittest,类中的函数名以test开头,就会被执行。所以如果login前也加了test,就会被作为用例执行一次。然后再下面抽奖用例中,调用登录接口的时候又会被执行一次。所以避免重复执行,login函数就不需要再加test了

基于代码驱动:处理有依赖关系接口

标签:适合   redis   代码实现   class   的区别   隔离   用例   框架   区别   

原文地址:https://www.cnblogs.com/bendouyao/p/9189158.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!