Python Web自动化测试模型-驱动模型

自动化测试模型可以看作自动化测试框架与工具设计的思想。自动化测试不仅仅是单纯写写脚本运行就可以了,还需要考虑到如何使脚本运行效率提高,代码复用、参数化等问题。

自动化测试模型分为四大类:线性模型,模块化驱动测试、数据驱动、关键词驱动。

1、线性模型

线性脚本中每个脚本都相互独立,且不会产生其他依赖与调用,其实就是简单模拟用户某个操作流程的脚本。


#案例一:在帝国软件主页自动登录和退出操作

from selenium import webdriver

from time import sleep


driver=webdriver.Firefox()

driver.get("http://XXXX")

#输入用户名

driver.find_element_by_name('username').clear()

driver.find_element_by_name('username').send_keys('51zxw')

#输入密码

driver.find_element_by_name('password').clear()

driver.find_element_by_name('password').send_keys('123456')


#点击登陆

driver.find_element_by_name('Submit').click()

sleep(3)


#退出

driver.find_element_by_link_text('退出').click()

sleep(2)

driver.switch_to_alert().accept()


sleep(3)

driver.quit()

#案例二:在百度主页根据定位元素并输入值

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()

2、模块驱动

线性模型虽然每个用例都可以拿出来独立运行,但是用例之间重复代码很多,开发、维护成本高。其实把重复的操作代码封装为独立的公共模块,当用例执行时需要用到这部分,直接调用即可,这就是模块驱动的方式。

比如登录系统、退出登录、截图函数等等。


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('username').clear()

driver.find_element_by_name('username').send_keys('51zxw')


driver.find_element_by_name('password').clear()

driver.find_element_by_name('password').send_keys('123456')


driver.find_element_by_name('Submit').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.Firefox()

driver.get("http://localhost/")

driver.implicitly_wait(10)#隐式等待10秒


Login().user_login(driver)

Login().user_logout(driver)


# 可以直接调用已有的登录模块,代码更简洁

#以下为直接调用登录模块


# from LoginClass import * #导入模块中所有的方法也可以只导入登录或者退出的方法如:from LoginClass import user_login


driver = webdriver.Firefox()

driver.get("http://localhost/")

driver.implicitly_wait(10)


Login().user_login(driver)

Login().user_logout(driver)

3、数据驱动

模块驱动的模型虽然解决了脚本的重复问题,但是需要测试不同数据的用例时,模块驱动的方式就不很适合了。

数据驱动就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。 装载数据的方式可以是列表、字典或是外部文件(txt、csv、xml、excel),目的就是实现数据和脚本的分离。


from selenium import webdriver

from time import sleep


class Login():

def user_login(self,driver,username,password):

driver.find_element_by_name('username').clear()

driver.find_element_by_name('username').send_keys(username)


driver.find_element_by_name('password').clear()

driver.find_element_by_name('password').send_keys(password)


driver.find_element_by_name('Submit').click()


def user_logout(self,driver):

driver.find_element_by_link_text('退出').click()

sleep(2)

driver.switch_to_alert().accept()


#以下为数据驱动调用——实现多个账户登录

from selenium import webdriver

from Loginpara import *

from time import sleep


driver=webdriver.Firefox()

driver.get("http://localhost")

driver.implicitly_wait(10)


Login().user_login(driver,'51zxw',123456)

sleep(3)

Login().user_logout(driver)


Login().user_login(driver,'51zxwPro',123456)

sleep(3)

Login().user_logout(driver)


sleep(3)

driver.quit()

4、关键字驱动

通过关键字的改变引起测试结果的改变叫关键字驱动测试。 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()

自动化测试成熟度模型

1)初级阶段-测试半自动化

先利用工具将日常费时的手工测试部分转化为半自动化(如postman/jmeter/jenkins),不要考虑什么框架或者CICD等高大上的东西,先解决部分效率问题,才能有时间和资源投入后续的建设。

当然这个阶段更适用于初创企业或者小型公司的测试同学。

2)中级阶段-回归测试自动化

有了前期的部分建设,接下来可以将日常的提测冒烟测试、系统测试阶段的主流程回归测试以及部分造测试数据的过程转化为自动化。

这个过程中一方面需要培养提升建设团队同学的技术能力,另一方面为自动化测试的大范围落地做铺垫(毕竟很多公司自动化测试看不到短期效益就变成了纯粹的KPI然后不了了之)。

上面说的都是测试自动化,并不是自动化测试。测试自动化指的是先将日常手工测试比较费时且重复度较高的部分转化为利用工具执行,

这样做是为了提高效率,解放人力资源,也是为了打好基础,顺带让领导知道,做这些事对团队有长期价值的。

3)高级阶段-大范围自动化测试

到了高级阶段,就可以开展大范围的自动化测试了。

这里的大范围并不是说完全不需要手工测试,而是按照自动化测试的纺锥模型(不是金字塔模型),按照UI-10%/API-70%/UNIT-20%的占比去不断建设和落地。

4)成熟阶段-自动化测试流水线

有了前面三个阶段的技术建设和用例沉淀以及不同团队间的协同配合,这个阶段可以考虑将自动化测试融入到企业的自动化交付流水线中。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值