我们的目标是:按照这一套资料学习下来,大家可以独立完成自动化测试的任务。
上一篇我们讨论了使用SMTP 对象的sendmail 发送HTML报告的方法。
本篇文章我们接着讲测试代码的一些优化,提高我们测试代码的易读性,维护方便性。大家也都多多少少有些了解,很多自动化测试方案无法在实际工作中落地,有一个重要的原因就是维护成功太高。导致维护测试脚本的时间比手动执行的时间还要长,不断优化代码。我们可以使用模块测试的思想,避免同一模块重复编写来提高效率。
1、自动化测试模型
自动化测试模型一般包括:线性测试、模块化驱动测试、数据驱动、关键字驱动、行为驱动、page object 设计模式等
我们今天讨论一下相对简单的模块化测试。
首先看一下我们之间编写的测试代码:
我们编写了2个文件,每个文件的内容类似:
import time import unittest from selenium import webdriver def driverfunc(): return webdriver.Chrome("C:\\Users\\dewi\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe") #使用unittest的框架,每个案例的标准形式 class LoginTest(unittest.TestCase): def setUp(self): self.driver = driverfunc() print("登录测试开始") #输入正确的密码登录成功测试 def test_login_Y(self): driver = self.driver username = "standard_user" password = "secret_sauce" print("登录的用户名是:%s,密码是:%s"%(username,password)) #打开浏览器,并最大化 driver.get("https://www.saucedemo.com/") driver.maximize_window() time.sleep(3) #输入用户名, driver.find_element_by_name("user-name").send_keys(username) # by name 定位 #输入密码 driver.find_element_by_name("password").send_keys(password) # by name 定位 #点击登录按钮 driver.find_element_by_id("login-button").click() # by ID 定位 time.sleep(3) #加入断言 //*[@id="header_container"]/div[1]/div[2]/div # 验证有显示:Products UIResult = driver.find_element_by_xpath('//*[@id="header_container"]/div[2]/span').text self.assertEqual("Products", UIResult, "密码正确登录验证失败,fail") def tearDown(self): #浏览器退出 self.driver.quit() print("登录测试结束")
可以查看上面的代码,每一条测试用例是独立的,一步一步执行测试。其实就是线性测试模型。这种模型的优势是每一个脚本都是独立的。任何一个测试用例可以拿出来单独的执行。但是,确定也是很明显,就是维护成本很高。若是登录的步骤有改,所有脚本都要改一遍。
为了解决线性测试的缺点,可以考虑使用模块化测试。
2、模块化测试
我们来实际做一下模块化测试。模块化的思路其实也是很简单的,类似于编程语言模块化的思想,就是把重复的操作独立成公共模块。在执行测试用例时就去调用。
这样,我们就可以更改上面的测试用例。
编写login.py
# coding=utf-8 #****************登录模块******************* import time from selenium import webdriver def driver_func(): return webdriver.Chrome("C:\\Users\\dewi\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe") def login(username,password): driver = driver_func() # 打开浏览器,并最大化 driver.get("https://www.saucedemo.com/") driver.maximize_window() time.sleep(3) # 输入用户名, driver.find_element_by_name("user-name").send_keys(username) # by name 定位 # 输入密码 driver.find_element_by_name("password").send_keys(password) # by name 定位 # 点击登录按钮 driver.find_element_by_id("login-button").click() # by ID 定位 return driver
然后,重新编写登录测试用例:
#使用unittest的框架,每个案例的标准形式 class LoginTest(unittest.TestCase): def setUp(self): print("登录测试开始") #输入正确的密码登录成功测试 def test_login_Y(self): username = "standard_user" password = "secret_sauce" print("登录的用户名是:%s,密码是:%s"%(username,password)) driver=login.login(username,password) #调用登录函数 time.sleep(3) #加入断言 //*[@id="header_container"]/div[1]/div[2]/div # 验证有显示:Products UIResult = driver.find_element_by_xpath('//*[@id="header_container"]/div[2]/span').text self.assertEqual("Products", UIResult, "密码正确登录验证失败,fail") self.driver=driver def tearDown(self): #浏览器退出 self.driver.quit() print("登录测试结束")
今天就先学习到这里。
每天进步一点点,加油!