概念
自动化测试模型可以看作自动化测试框架与工具设计的思想。
线性模型
线性脚本中每个脚本都相互独立,且不会产生其他依赖与调用,其实就是简单模拟用户某个操作流程产生的脚本。
from selenium import webdriver from time import sleep driver=webdriver.Chrome() driver.get("http://www.baidu.com") #根据id=kw定位元素,并输入python driver.find_element_by_id("kw").send_keys("python") sleep(1) #清除输入框内容 driver.find_element_by_id("kw").clear() sleep(1) #根据name=kw定位元素,并输入python driver.find_element_by_name("wd").send_keys("python") sleep(2) #根据id=su定位元素,并点击 driver.find_element_by_id("su").click() sleep(3) driver.quit()
模块化驱动测试
线性模型虽然每个用例都可以拿出来独立运行,但是用例之间重复代码很多,开发、维护成本高。其实把重复的操作代码封装为独立的公共模块,当用例执行时需要用到这部分,直接调用即可,这就是模块驱动的方式。比如登录系统、退出登录、截图函数等等。
from selenium import webdriver from time import sleep class Login(): def user_login(self,driver): driver.find_element_by_link_text('账号密码登录').click() driver.find_element_by_name('all').clear() driver.find_element_by_name('all').send_keys('51zxw') driver.find_element_by_name('pwd').clear() driver.find_element_by_name('pwd').send_keys('123456') driver.find_element_by_class_name('btn-primary').click() def user_logout(self,driver): driver.find_element_by_link_text('退出').click() sleep(2) driver.switch_to_alert().accept() if __name__=='__main__': driver = webdriver.Chrome() driver.get("https://passport.csdn.net/login") driver.implicitly_wait(10) Login().user_login(driver) Login().user_logout(driver)
数据驱动测试
模块驱动的模型虽然解决了脚本的重复问题,但是需要测试不同数据的用例时,模块驱动的方式就不很适合了。
接口自动化中测试用例和脚本的分离、测试不同的账号执行情况、操作的流程相同但是数据不同等等这些用数据驱动吧。
数据驱动就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。
装载数据的方式可以是列表、字典或是外部文件(txt、csv、xml、excel),目的就是实现数据和脚本的分离。
from selenium import webdriver
from time import sleep
class Login():
def user_login(self,driver,name,pwd):
driver.find_element_by_link_text('账号密码登录').click()
driver.find_element_by_name('all').clear()
driver.find_element_by_name('all').send_keys('name')
driver.find_element_by_name('pwd').clear()
driver.find_element_by_name('pwd').send_keys('pwd')
driver.find_element_by_class_name('btn-primary').click()
def user_logout(self,driver):
driver.find_element_by_link_text('退出').click()
sleep(2)
if __name__ == '__main__':
driver = webdriver.Chrome()
driver.get("https://passport.csdn.net/login")
driver.implicitly_wait(10)
login = Login()
login.user_login(driver, "test_name", 'test_pwd')
sleep(3)
login.user_logout(driver)
login.user_login(driver, "test_name2", 'test_pwd2')
sleep(5)
login.user_logout(driver)
关键字驱动测试
通过关键字的改变引起测试结果的改变叫关键字驱动测试。
selenium IDE也是一种传统的关键字驱动的自动化工具,Robot Framework 是一个功能更强大的关键字驱动测试框架
from selenium import webdriver import time class KeyTest(): def __init__(self,br=None): if "IE" == br: self.driver = webdriver.Ie() elif "Firefox" == br: self.driver = webdriver.Firefox() else: self.driver = webdriver.Chrome() def open(self,url): self.driver.get(url) def send_keys(self,text): try: self.driver.find_element_by_id('kw').send_keys(text) except: print("click fail!") raise def click(self,id): try: self.driver.find_element_by_id(id).click() except: print("click fail!") raise def sleep(self,times): time.sleep(int(times)) def quit(self): self.driver.quit() if __name__ == '__main__': dr = KeyTest() #打开浏览器 dr.open('http://www.baidu.com') #输入"自动化测试" dr.send_keys('自动化测试') #点击搜索 dr.click('su') dr.quit()