自动化测试模型是自动化测试架构的基础,自动化测试的发展也经历的不同的阶段,不断有新的模型(概念)被提出,了解和使用这些自动化模型将帮助我们构建一个灵活可维护性的自动化架构。
4.1.1 线性测试
通过录制或编写脚本,一个脚本完成一个场景(一组完整功能操作) ,通过对脚本的回放来进行自动化测试。这是早期进行自动化测试的一种形式;我们在上一章中练习使用 webdriver API 所编写的脚本也是这种形式。
测试脚本一
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get("http://wwww.xxx.com")
driver.find_element_by_id("tbUserName").send_keys("username")
driver.find_element_by_id("tbPassword").send_keys("123456")
driver.find_element_by_id("btnLogin").click()
#执行具体用例操作
......
driver.quit ()
测试脚本二
from selenium import webdriver
import time
博客园---虫师
http://fnng.cnblogs.com 93
driver = webdriver.Firefox()
driver.get("http://wwww.xxx.com")
driver.find_element_by_id("tbUserName").send_keys("username")
driver.find_element_by_id("tbPassword").send_keys("123456")
driver.find_element_by_id("btnLogin").click()
#执行具体用例操作
......
driver.quit ()
通过上面的两个脚本,我们发现它优势就是每一个脚本都是独立的,任何一个脚本文件拿出来就能单独运行;当然,缺点也很明显,用例的开发与维护成本很高:一个用例对应一个脚本,假如登陆发生变化,用户名的属性发生改变,不得不需要对每一个脚本进行修改,测试用例形成一种规模,我们可能将大量的工作用于脚本的维护,从而失去自动化的意义。
这种模式下数据和脚本是混在一起的,如果数据发生变也需要对脚本进行修改。这种模式下脚本的没有可重复使用的概念。
4.1.2 模块化与类库
我们会清晰的发现在上面的脚本中,其实有不少内容是重复的;于是我们就考虑能不能把重复的部分
写成一个公共的模块,需要的时候进行调用,这样就大大提高了我们编写脚本的效率。
login.py
#登录模块
def login():
driver.find_element_by_id("tbUserName").send_keys("username")
driver.find_element_by_id("tbPassword").send_keys("456123")
driver.find_element_by_id("btnLogin").click()
quit.py
#退出模块
def quit_():
..............
测试用例:
博客园---虫师
http://fnng.cnblogs.com 94
#coding=utf-8
from selenium import webdriver
import login,quit_ #调用登录、退出模块
driver = webdriver.Firefox()
driver.get("http://wwww.xxx.com")
#调用登录模块
login.login()
#其它个性化操作
......
#调用退出模块
quit.quit_()
注意,上面用例非完整代码。
通过阅读上面的代码发现,我们可以把脚本中相同的部分代码独立出来,形成模块或库;这样做有两
方面的优点:
一方面提高了开发效率,不用重复的编写相同的脚本;假如,我已经写好一个登录模块,我后续需要
做的就是在需要的地方调用,不同重复造轮子。
另一方面方便了代码的维护,假如登录模块发生了变化,我只用修改 login.py 文件中登录模块的代
码即可,那么所有调用登录模块的脚本不用做任何修改。
4.1.3 数据驱动
数据驱动应该是自动化的一个进步;从它的本意来讲,数据的改变(更新)驱动自动化的执行,从而
引起测试结果的改变。这显然是一个非常高级的概念和想法。其实,我们可直白的理解成参数化,输入数
据的不同从而引起输出结果的变化。