5 unittest与selenium
封装待测试功能的操作
1.完成创建Commonlib目录,创建Commonlib.py文件,并将前面封装的selenium拷贝进去
from selenium import webdriver
import time
class Commonshare(object):
# 初始化方法
def __init__(self):
# 创建浏览器对象
self.driver = webdriver.Firefox()
# 设置隐式等待
self.driver.implicitly_wait(5)
# 设置浏览器的最大化
self.driver.maximize_window()
def open_url(self,url):
# 请求指定站点
self.driver.get(url)
time.sleep(3)
def locateElement(self, locate_type, value):
# 判断定位方式并调用相关方法
el = None
if locate_type == 'id':
el = self.driver.find_element_by_id(value)
elif locate_type == 'name':
el = self.driver.find_element_by_name(value)
elif locate_type == 'class':
el = self.driver.find_element_by_class_name(value)
elif locate_type == 'text':
el = self.driver.find_element_by_link_text(value)
elif locate_type == 'xpath':
el = self.driver.find_element_by_xpath(value)
elif locate_type == 'css':
el = self.driver.find_element_by_css_selector(value)
# 如果el不为None,则返回
if el is not None:
return el
# 指定对某一元素的点击操作
def click(self, locate_type, value):
# 调用自己创建的locateElement方法定位元素
el = self.locateElement(locate_type,value)
el.click()
time.sleep(1)
# 对指定的元素进行数据输入
def input_data(self,locate_type,value,data):
# 调用自己创建的locateElement方法定位元素
el = self.locateElement(locate_type,value)
el.send_keys(data)
# 获取指定元素的文本内容
def get_text(self, locate_type, value):
# 调用自己创建的locateElement方法定位元素
el = self.locateElement(locate_type, value)
return el.text
# 获取指定元素的属性值
def get_attr(self, locate_type, value, data):
# 调用自己创建的locateElement方法定位元素
el = self.locateElement(locate_type, value)
return el.get_attribute(data)
# 收尾清理方法
def __del__(self):
time.sleep(3)
self.driver.quit()
2.创建Busniess目录,创建Business.py文件,并编写如下
# 导入已经封装好selenium的CommonShare类
from CommonLib.Commonlib import Commonshare
# 继承CommonShare,继承之后Commonshare中的方法都能使用
class Login(Commonshare):
def login_yhd(self, user, pwd):
self.open_url('http://www.yhd.com')
# 点击登陆
self.click('class', 'hd_login_link')
# 输入账号
self.input_data('id', 'un', user)
# 输入密码
self.input_data('id', 'pwd', pwd)
# 点击登陆
self.click('id', 'login_button')
if __name__ == '__main__':
login = Login()
login.login_yhd('xxxxxxx','xxxxxx')
3.创建Testcase目录编写测试用例testcase.py文件,如下
import unittest
# 从Business组件中导入我们定义的测试登录的类
from Busniess.Login import Login
class Test(unittest.TestCase):
def setUp(self):
print ("开始进行测试")
def tearDown(self):
print('测试结束')
# 正确登录的测试用例
def test_001(self):
login = Login()
login.login_yhd('xxxxx','xxxxx')
data = login.get_text('class','hd_login_name')
self.assertEqual('hack_ai_buster',data)
# 没有输账号密码直接点击登录的测试用例
def test_002(self):
login = Login()
login.login_yhd('','')
data = login.get_text('id','error_tips')
self.assertEqual('请输入账号和密码',data)
# 随意输入账号,不输入密码的测试用例
def test_003(self):
login = Login()
login.login_yhd('hgvjchgc','')
data = login.get_text('id','error_tips')
self.assertEqual('请输入密码',data)
# 用于演示出bug的测试用例
def test_004(self):
login = Login()
login.login_yhd('hgvjchgc','')
data = login.get_text('id','error_tips')
# 我们故意写错预期结果,让这个断言抛出
self.assertEqual('请输入密码itcast',data)
if __name__ == '__main__':
unittest.main()
4.在Testcase目录编写测试用例testcase.py文件,如下
import unittest
from Testcase.testcase import Test
class Suit(unittest.TestCase):
def test_suit(self):
# 定义要是用的测试用例列表
case_list = ['test_002','test_003','test_004']
# 创建测试套件
mysuit = unittest.TestSuite()
# 遍历测试用例列表
for case in case_list:
# 将测试用例添加到测试套件中
mysuit.addTest(Test(case))
# 运行Runner执行测试,verbosity=2指定为每个测试用例生成报告,run中传入要执行的测试套件
unittest.TextTestRunner(verbosity=2).run(mysuit)
if __name__ == '__main__':
unittest.main()