模块化实例
脚本中有很多代码是可以模块化的,比如登录模块。我们的每一个用例的执行都需要登录脚本,那可我们是否可以将登录脚本独立到单独的文件调用。
下面以126 邮箱为例:
#coding=utf-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get("http://www.126.com")
#登陆
driver.find_element_by_id("idInput").clear()
driver.find_element_by_id("idInput").send_keys("username")
driver.find_element_by_id("pwdInput").clear()
driver.find_element_by_id("pwdInput").send_keys("password")
driver.find_element_by_id("loginBtn").click()
#收信、写信、删除信件等操作
……
#退出
driver.find_element_by_link_text(u"退出").click()
driver.quit()
从126 邮箱业务流程分析,所有的邮箱功能需要登录用户登录,如收信、写信、删除信件等操作。对
后功能测试用例来说,测试人员在执行的过程中可以一次登录验证所有的功能之后退出,但自动化测试要
保持用例之间的独立性,所以每一条自动化测试用例都需要登录和退出操作。那么,我们就可以把用例抽
象为公共函数,那么对于每一条用例当需要登录/退出时,只需要调用公共函数即可,降低了代码的重复
编写。从另一个角度来讲,哪果登录和退出的定位发生了变化,那么我们只用修改公共函数即可,省去了
对每一个用例中登录/退出脚本修改的工作量。
下面对登录和退出进行模块的封装。mail126.py
#coding=utf-8
from selenium import webdriver
#登陆
def login():
driver.find_element_by_id("idInput").clear()
driver.find_element_by_id("idInput").send_keys("username")
driver.find_element_by_id("pwdInput").clear()
driver.find_element_by_id("pwdInput").send_keys("password")
driver.find_element_by_id("loginBtn").click()
#退出
def logout():
driver.find_element_by_link_text(u"退出").click()
driver.quit()
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get("http://www.126.com")
login() #调用登陆模块
#收信、写信、删除信件等操作
logout() #调用退出模块
现在我们将登录的操作步骤封装到login()函数中,把退出的操作封装到logout()函数中,对于用例
本身只用调用这两个函数即可,可以把更多的注意力放到本例本身的操作步骤中。
当然,如果只是把步骤封装成函数并没简便太多,我们需要将其放到单独的文件中供其它用例调用。
#coding=utf-8
#登陆
def login(driver):
driver.find_element_by_id("idInput").clear()
driver.find_element_by_id("idInput").send_keys("username")
driver.find_element_by_id("pwdInput").clear()
driver.find_element_by_id("pwdInput").send_keys("password")
driver.find_element_by_id("loginBtn").click()
当函数被独立到单独的文件中时做了一点调整,主要在函数的传参上,因为函数内部的操作需要使用
driver,但是driver 并没有在此文件中定义,所以需要调用的用例传递driver 给调用的函数。
#coding=utf-8
from selenium import webdriver
import public
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get("http://www.126.com")
#调用登陆模块
public.login(driver)
#收信、写信、删除信件等操作
#调用退出模块
public.logout(driver)
首先,需要导入当前目录中的public.py,在需要的位置调用文件中的login()和和logout()函数。
这样对于每个用例来说就简便了许多,也更易于维护。