0
点赞
收藏
分享

微信扫一扫

接口自动化测试实战之智能场景如何攻破

智能场景的意思就是怎么样才能让接口自动化智能化,让使用接口框架的人越来越没有要求,大街上随便拉一个人来,一分钟了解框架的使用,就能完美地去完成接口自动化测试。

1.找出公司要求我们测试的接口的共同点

假设有10个接口,每个接口的参数名不同但格式是相同的。我们就可以封装一个生成入参的模板的函数,填写初始参数运行,就能生成一个模板。

测试人员只要在模板中填写测试用例了。那这些编写测试用例的人员是不用学习计算机语言,框架思维的。在工作中使用得比较多的就数据驱动测试思维(DDT)。

import unittest

from selenium import webdriver

from selenium.webdriver.common.by import By

from time import sleep

from confg.loginconf import *

from pageobject.loginpage import *

from ddt import ddt,data,unpack

from common.read_excel import readexcels

#

# tc=[['login001','用户名密码为空的测试','','','1','用户名不能为空!'],

# ['login002','验证码为空的测试','13800138006','123456','','验证码不能为空!'],

# ['login003','用户名密码不匹配的测试','13800138001','12345','1','账号不存在!']]

#外部列表中的每个元素(内容列表)是一条测试用例

#从excel中获得数据源

dt=readexcels('../datacase/tpshop_login.xlsx')

@ddt

class tpshop_login_ddt(unittest.TestCase):

def setUp(self):

self.driver = webdriver.Chrome()

self.driver.maximize_window()

self.driver.get(url_test)

def tearDown(self):

self.driver.quit()

@data(*dt) #每次转一条测试用例进来,第一次的tc=['login001','用户名密码为空的测试','','','1','用户名不能为空!']

def test_tpshop_login_not(self,cc):#设置一个变量来接收cc每次转进来的测试用例

'''用户名与密码都为空'''

# 操作步骤

print(cc[0],cc[4], cc[5], cc[6],cc[7])

login_test(self.driver, cc[4],cc[5], cc[6])

# 断言

sleep(2)

self.assertEqual(login_except_ec(self.driver),cc[7])

print('{}执行完成...'.format(cc[1]))

#logger.info('test_username_password_is_empty执行成功')

2.找出多接口之间关联关系

单接口的自动化是比较简单的。多接口关联自动化就比较复习了多接口关联的目的在于,模拟用户真实操作行为,提前梳理该功能涉及的全部接口,包含前置业务接口、后置业务接口以及接口之间的依赖关系,通过将用户行为涉及到的接口全部关联在一起完成的自动化检测,提前发现由于后端服务异常导致用户功能使用异常的场景。

如果业务有做UI自动化检测,那我们接口检测的可与业务UI错开来,提高检测试效率,提早发现问题和提高工作质量。

接口关联如何做到智能化呢?

主要还是要对接口处理机会非常了解,提前发现接口与接口接关联的算法,才能有有效的应对措施。

接口自动化测试实战之智能场景如何攻破_验证码


例如禅道登录接口和新增产品。必需要登录成功后才能新增产品。新增产品又有很多个不同的测试用例,如果执一个新增产品的用例就要登录一下次那么代码的执行效率就大的降低了。在UINTTEST框架中就可以把有的共同代码部分封装起来,全部放入setupclass中.

import unittest

from selenium import webdriver

from pageobject.DS_reg import *

from common.mysql_s import opendb

from loguru import logger

import time

from common.try_fengzhuang import try_fz

url="http://127.0.0.1:8082/dsmall/public/index.php/admin/login/index.html"

class DSmall_add_member(unittest.TestCase):

@classmethod

def setUpClass(cls):

cls.driver=webdriver.Chrome()

cls.driver.maximize_window()

cls.driver.get(url)

cls.driver.implicitly_wait(30)

DSmall_login(cls.driver)

@classmethod

def tearDownClass(cls):

cls.driver.quit()

def test_member_emptyinfo(self):

'''全部信息为空测试'''

input_member_info(self.driver,'','','','','','')

try:

self.assertEqual(self.driver.find_element(By.ID,"member_name-error").text,'会员名不能为空')

self.assertEqual(self.driver.find_element(By.ID, "member_password-error").text, '密码不能为空')

self.assertEqual(self.driver.find_element(By.ID, "member_email-error").text, '电子邮箱不能为空')

except Exception:

logger.info('执行失败')

else:

logger.info('执行成功')

clear(self.driver)

接口测试过程中会遇到各种各样的场景,实现起来也很有意思,但我们一定要会边工作边思考,把怎样让工作更智能化,怎样让效率更高,贯穿整个工作过程。

举报

相关推荐

0 条评论