自动化测试用例设计
自动化测试用例一般可以由手工测试用例转化而来,需要注意:
- 不是所有的手工测试用例都可以转为自动化测试用例
- 考虑到脚本开发的成本,不需要选择太复杂的用例。如果有必要,可以把流程拆分成多个用例来实现脚本。
- 选择的用例最好可以构建成场景。例如,一个功能模块,分成多个测试用例,多个测试用例使用同一个场景,
- 选取的用例可以是你认为重复执行,很繁琐的一部分,例如字段验证,提示信息验证这类,这部分适用于回归测试。
- 选取的用例可以是主体流程,这部分适用于冒烟测试。
在编写自动化测试用例过程中应该遵循以下原则: - 一个用例为一个完整的场景,从用户登录系统到最终退出并关闭浏览器。
- 一个用例只验证一个功能点,不要试图在用户登录后把所有的功能都验证一遍。
- 尽可能少的编写逆向测试用例。一方面因为逆向逻辑的用例很多(例如,手机号输错有几十种情况)
- 另一方面自动化测试脚本本身很脆弱,复杂的逆向逻辑用例实现起来较为麻烦且容易出错。
- 用例和用例之间尽量避免产生依赖(高内聚一个模块中的功能要全面,低耦合多个模块尽量不产生联系)
- 一条用例完成测试之后要将测试场景进行还原,以免影响其他测试用例的执行。
tip:如果复杂度过高,出错误的概率会很高。(圈复杂度算法)
有验证码的时候该怎么进行自动化?
1.让开发暂时屏蔽验证码,将验证码换成万能码(“aaaa”)。
2.懂得机器学习,可以训练脚本,可以达到99%以上识别成功率。
3.调用OCR接口,去解析图片中的验证码。
线性测试模型:最基本的代码组织形式,单纯的模拟用户完整的操作场景,测试用例的开发和维护的成本较高。
缺点:
1.维护性差
2.模块比较多,运行起来不方便,写一个主运行模块main
3.如果所有用例的步骤放在一起,可读性差。
#需求使用线性脚本的模型,编写电商系统的正向用例的脚本:
#打开淘宝系统首页
#点击注册按钮
#输入有效的用户名
#输入有效的邮箱
#输入有效的确认密码
#已阅读按钮
#点击“同意协议 立即注册”
from selenium import webdriver
from time
driver = webdriver.Firfox()#创建浏览器对象
driver.implicity.wait(10)#隐式等待10秒钟
driver.get("http://www.taobao.com")、
url1 = driver.current_url#获取淘宝首页的URL地址
if url == "http://www.taobao.com":#断言首页地址是否正确
print("首页打开是正确的")
else:
print("首页打开失败")
driver.find_element_by_link_text("免费注册").click()#点击免费注册按钮
url2 = driver.current_url
driver.find_element_by_id("username").send_keys("123456789")#在用户名文本框内输入123456789
driver.find_element_by_id("email").send_keys("dvugaigoiashoasho")#在邮箱文本框内输入dvugaigoiashoasho
driver.find_element_by_id("passward").send_keys("234548446846")#在密码文本框内输入234548446846
driver.find_element_by_id("repassward").send_keys("234548446846")#在确认密码文本框内输入234548446846
driver.find_element_by_link_text("同意协议 立即注册").click()#点击同意协议 立即注册按钮
driver.quit()
模块话驱动测试:把重复的操作独立成公共模块,当用例执行过程中需要用到这一模块时就会被调用,最大限度的消除了重复,提高了测试用例的可维护和复用性。
#将脚本中重复的东西转化为模块化的脚本
#脚本中重复的代码抽离出来形成一个模块(模块中的方法)
#需要设计一个方法,这个方法可以提供注册的基本步骤,通过参数传入数据。
def reg(username, email, passward, repassward):
from selenium import webdriver
from time
driver = webdriver.Firfox()#创建浏览器对象
driver.implicity.wait(10)#隐式等待10秒钟
driver.get("http://www.taobao.com")、
url1 = driver.current_url#获取淘宝首页的URL地址
if url == "http://www.taobao.com":#断言首页地址是否正确
print("首页打开是正确的")
else:
print("首页打开失败")
driver.find_element_by_link_text("免费注册").click()#点击免费注册按钮
url2 = driver.current_url
driver.find_element_by_id("username").send_keys("username")#在用户名文本框内输入123456789
driver.find_element_by_id("email").send_keys("email")#在邮箱文本框内输入dvugaigoiashoasho
driver.find_element_by_id("passward").send_keys("passward")#在密码文本框内输入234548446846
driver.find_element_by_id("repassward").send_keys("repassward")#在确认密码文本框内输入234548446846
driver.find_element_by_link_text("同意协议 立即注册").click()#点击同意协议 立即注册按钮
driver.quit()
if __name__ == __main__:
reg(123456789, dvugaigoiashoasho, 234548446846, 234548446846)
else:
print("有问题")
创建一个类的模块化测试模型的例子:
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
import time
class The_login(self):
def open_browser(self):
self.driver.Firfox()
self.driver.get("http://www.taobao.com")
def login(self):
self.driver.find_elemenet_by_link_text("登录").click()
self.driver.find_element_by_xpath("//*[@id='username']").send_keys("habnweheuj")
self.driver.find_element_by_xpath("//*[@id='passward']").send_keys("123456")
self.driver.find_element_vy_xpath("//*[@id='login_form']/div/a").click()
time.sleep(3)
def logout(self):
ele = self.driver.find_element_by_xpath("//*[@id='top-userabr']/a")
ActionChains(self.driver).move_to_element(ele).perform()
self.driver.find_element_by_link_text("退出").click()
def quitB(self):
self.driver.quit()
if __name__ = "__main__":
aa = The_login()
aa.login()
aa.logout()
aa.quitB()