介面自動化測試實戰之智慧場景如何攻破

千鋒IT教育發表於2022-11-24

智慧場景的意思就是怎麼樣才能讓介面自動化智慧化,讓使用介面框架的人越來越沒有要求,大街上隨便拉一個人來,一分鐘瞭解框架的使用,就能完美地去完成介面自動化測試。

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="
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)

介面測試過程中會遇到各種各樣的場景,實現起來也很有意思,但我們一定要會邊工作邊思考,把怎樣讓工作更智慧化,怎樣讓效率更高,貫穿整個工作過程。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70023145/viewspace-2925018/,如需轉載,請註明出處,否則將追究法律責任。

相關文章