智能场景的意思就是怎么样才能让接口自动化智能化,让使用接口框架的人越来越没有要求,大街上随便拉一个人来,一分钟了解框架的使用,就能完美地去完成接口自动化测试。
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错开来,提高检测试效率,提早发现问题和提高工作质量。
接口关联如何做到智能化呢?
主要还是要对接口处理机会非常了解,提前发现接口与接口接关联的算法,才能有有效的应对措施。
IT问答库http://www.mobiletrain.org/qa/
例如禅道登录接口和新增产品。必需要登录成功后才能新增产品。新增产品又有很多个不同的测试用例,如果执一个新增产品的用例就要登录一下次那么代码的执行效率就大的降低了。在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)
接口测试过程中会遇到各种各样的场景,实现起来也很有意思,但我们一定要会边工作边思考,把怎样让工作更智能化,怎样让效率更高,贯穿整个工作过程。
IT问答库 http://www.mobiletrain.org/qa/