一、用例的封装
from selenium import webdriver
from time import sleep
class discuz(object):
def __init__(self): #网站
self.driver=webdriver.Chrome()
self.driver.get('http://192.168.203.128/bbs/')
self.driver.maximize_window()
self.driver.implicitly_wait(10)
def login(self,name,pwd):#登录模块
self.driver.find_element_by_id('ls_username').send_keys(name)
self.driver.find_element_by_id('ls_password').send_keys(pwd)
sleep(2)
self.driver.find_element_by_xpath('/html/body/div[5]/div/div[1]/form/div/div/table/tbody/tr[2]/td[3]/button/em').click()
def fatie(self,title,body): #发帖模块
self.login("")
self.driver.find_element_by_id('subject').send_keys(title)
el=self.driver.find_element_by_id('e_iframe')
self.driver.switch_to.frame(el)
self.driver.find_element_by_xpath('/html/body').send_keys(body)
self.driver.switch_to.default_content()
self.driver.find_element_by_id('postsubmit').click()
def search(self,content):#搜索模块
self.driver.find_element_by_id('scbar_txt').send_keys(content)
self.driver.find_element_by_id('scbar_btn').click()
def personal_center(self): #个人中心模块
self.driver.find_element_by_xpath('//*[@id="um"]/div/a/img').click() #点头像
self.driver.find_element_by_xpath('//*[@id="uhd"]/ul/li[1]/a').click() #主题管理
def news(self):#消息模块
self.driver.find_element_by_xpath('/html/body/div[6]/div/div[1]/div/p[1]/a[3]').click()
self.driver.find_element_by_xpath('//*[@id="ct"]/div[1]/div/ul/li[3]/a').click()
self.driver.find_element_by_xpath('//*[@id="ct"]/div[2]/div[1]/ul/li[3]/a').click()
if __name__ == '__main__':
xk=discuz()
# xk.login('admin','123456')
# sleep(2)
# xk.driver.get('http://192.168.203.128/bbs/forum.php?mod=post&action=newthread&fid=2')
# sleep(2)
# xk.fatie('徐凯大帅哥','是的,没错')
# xk.driver.get('http://192.168.203.128/bbs')
# sleep(3)
# xk.personal_center()
# sleep(2)
#
# xk.news()
# sleep(2)
# xk.driver.get('http://192.168.203.128/bbs')
# sleep(2)
# xk.search('徐凯')
# sleep(2)
==================================================================
二、unittest
1、介绍单元测试框架
单元测试框架
(1)python当总的unittest 框架(讲),pytest框架
a、unittest框架是python自带的库
b、pytest框架是python中第三方库
(2)unittest框架的作用:管理和组织用例
(3)unittest 框架的格式:
import unittest #导入unittest
class Uikj(unittest.TestCase):#(定义一个类,一个testcase的实例就是用例)
@classmethod
def setUpClass(cls) -> None:#类的开始
print("类的开始")
@classmethod
def tearDownClass(cls) -> None: #类的结束
print("类结束")
def setUp(self) -> None:
print("方法的开始")
def tearDown(self) -> None:
print("方法结束")
def test01(self):
print("111")
def test03(self):
print("333")
def test02(self):
print("222")
def testa(self):
print("a")
def testA(self):
print("A")
def dl(self):
print("独立")
if __name__ == '__main__':
unittest.main()
注意点:
(1)用例执行一定要是test开头;
(2)用例执行的顺序ascii表排序:0-9,A-Z,a-z
(3)类的是开始和类的结束,在框架中只运行一次
(4)方法的开始和方法结束每个用例中都执行
================================================
第二种方法:
设置环境变量
import unittest #导入unittest
class Uikj(unittest.TestCase):#(定义一个类,一个testcase的实例就是用例)
@classmethod
def setUpClass(cls) -> None:#类的开始
print("类的开始")
@classmethod
def tearDownClass(cls) -> None: #类的结束
print("类结束")
def setUp(self) -> None:
print("方法的开始")
def tearDown(self) -> None:
print("方法结束")
def test1(self):
print("111")
def test3(self):
print("333")
def test2(self):
print("222")
def testa(self):
print("a")
def testA(self):
print("A")
def dl(self):
print("独立")
if __name__ == '__main__':
# unittest.main() #第一种方法调用所有的用例
tj=unittest.TestSuite()#创建一个套件对象
# tj.addTest(Uikj("test1")) #添加用例
tj.addTests([Uikj("test1"),Uikj("test2")])
r=unittest.TextTestRunner() #创建一个执行对象
r.run(tj) #运行套件
==================================================
第三种方法:读取路径
import unittest #导入unittest
class Uikj(unittest.TestCase):#(定义一个类,一个testcase的实例就是用例)
@classmethod
def setUpClass(cls) -> None:#类的开始
print("类的开始")
@classmethod
def tearDownClass(cls) -> None: #类的结束
print("类结束")
def setUp(self) -> None:
print("方法的开始")
def tearDown(self) -> None:
print("方法结束")
def test1(self):
print("111")
def test3(self):
print("333")
def test2(self):
print("222")
def testa(self):
print("a")
def testA(self):
print("A")
def dl(self):
print("独立")
if __name__ == '__main__':
# unittest.main() #第一种方法调用所有的用例
# tj=unittest.TestSuite()#创建一个套件对象
# tj.addTest(Uikj("test1")) #添加用例
# tj.addTests([Uikj("test1"),Uikj("test2")])
# r=unittest.TextTestRunner() #创建一个执行对象
#
# r.run(tj) #运行套件
#
lj=r"C:\Users\Administrator\PycharmProjects\gs2\gsml\gs_ui" #相对路径
d=unittest.TestLoader().discover(start_dir=lj,pattern="ui_kuangjian*.py")#
r=unittest.TextTestRunner()
r.run(d)
==================================================
结合测试报告;
测试报告模板:
==================================================
总结:
一、unittest的介绍
当我们写的用例越来越多时,我们就需要考虑用例编写的规范与组织,以便于后期的维护,而unittest正是这样一款工具
二、unittest是Python自带的标准库中的模块,其中包括:
1、TestCase类
2、TestSuite类
3、TestLoader类
4、TextTestRunner类
5、TextTestResult类
6、TestFixture类
解释下:
TestCase:
一个Testcase的实例就是一个测试用例,测试用例就是一个完整的测试流程,包括初始化setUp、运行run、测试后的还原tearDown
TestSuite:
对一个功能的测试往往需要多测试用例的,可以把多的测试用例集合在一起执行,这就是TestSuite的概念。常用addTest()方法将一个测试用例添加到测试套件中
TextTestRunner:
是用来执行测试用例的,其中的run(test)用来执行TestSuite/TestCase。测试的结果会保存在TextTestResult实例中
TestFixture:
测试准备前要做的工作和测试执行完后要做的工作.包括setUp()和tearDown()。通过覆盖TestCase的setUp和tearDown来实现。
TestLoader:
是用来搜索所有以test开头的测试用例,然后将其加入到testsuite中
图形化解释:如下图
三、框架的组成
在写测试类以及测试用例时要规定一个命名习惯,一般测试类可以以Test开头,也可以以Test结尾。测试用例一般是以test开头。
eg:结构如下:
import unittest #导入unittest包
#创建测试类:从unittest.TestCase继承
classRomanNumeralConverterTest(unittest.TestCase):
def setUp(self): #初始化测试环境
def tearDown(self): #还原测试环境
def test_case(self):测试用例