import unittest
'''
1.使用什么定位方法:
一般使用id,name,class,比较方便点,如果标签中这些属性都没有,就会使用xpath和css,有时候针对一些文本也会使用link_text
2.定位不到元素,是什么原因?
1.所有定位的元素在一个新窗口页面上,需要switch_to.window方法通过句柄进行窗口切换
2.网络,计算硬件或者页面元素较多加载缓慢,代码定位元素在元素加载之前导致定位元素失败,代码中定位元素之前添加等待时间
3.定位的元素在iframe框中,导致元素定位失败,使用switch_to.frame切换到iframe框在进行定位
4.定位元素不在当前页面可见范围,导致定位失败,将页面最大化或者拖动滚动条到能显示元素的位置
3.单元测试框架
自动化使用是什么框架?自动化用例用的什么管理工具
单元测试框架:unittest,pytest
单元测试框架作用:
组织和执行测试用例
提供了丰富的断言方法
生成测试报告,结合第三方生成html格式的测试报告
单元测试框架的核心内容:
1.TestCase:继承TestCase,将实例方法变成测试用例,用例必须要使用test开头,执行用例顺序是按照ASCII
2.FixTure:测试固件,用于测试前的准备工作和测试后清理工作
setup:为测试之前提供准备工作,比如测试之前打开浏览器,每条用例执行前都会执行一次
teardown:为测试结束提供清理工作,比如管理浏览器,每条用例执行前都会执行一次
setupclass:测试前提供准备工作,所有用例执行前只会执行一次
teardownclass:为测试结束提供清理工作,比如管理浏览器,所有用例只会执行一次
3.testsuite:测试套件,把需要执行的测试用例加载到测试套件中,形成测试用例集
4.testrunner:用例执行器,执行套件中的测试用例
5.report:结合第三方模块HTMLTestRunner,生成丰富的html格式的测试报告
'''
import unittest
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
import HTMLTestRunner3_New
class Dcs(unittest.TestCase):
@classmethod
def setUp(self) -> None:
print('用例的开始')
@classmethod
def tearDown(self) -> None:
print('用例结束')
@classmethod
def setUpClass(cls) -> None:
print('用例开始')
@classmethod
def tearDownClass(cls) -> None:
print('用例结束')
def test_01(self):
print('1111')
def test_a(self):
print('2222')
def test_02(self):
print('3333')
def test_A(self):
print('4444')
def test(self):
print('0000')
def func1(self): #不是以test开头不会被执行
print('5555')
def login(self): #不是以test开头不会被执行
print('=====')
if __name__ == '__main__':
#第一种执行方法:通过main()函数,执行unittest中所有用例
unittest.main()
#执行用例第二种方法:通过添加用例到suite套件中
suite=unittest.TestSuite() #实例化一个套件对象
# suite.addTest(Dcs("test_01")) # 添加单条用例到套件中
suite.addTests([Dcs('test_01'),Dcs('test_02'),Dcs('test_a')]) #以列表的形式添加多条用例
runner=unittest.TextTestRunner() #实例化一个执行器对象
runner.run(suite) #通过调用run方法执行套件中的测试用例
#执行用例第三种方法,通过discover加载指定路径的测试用例+自动运行+生成报告
path1='D:\python\dcs31\duoceshi31_UI'
stime1=time.strftime('%Y-%m-%d-%H-%M-%S') #获取系统时间,避免相同文件内容被覆盖
print(stime1)
file_path=path1+"\\%s_ui_report.html"%stime1 #通过open函数自动生成html文件,open在写内容时,如果文件不存在会自动生成
with open(file_path,'wb') as f : #wb以二进制方式写入内容
discover=unittest.TestLoader().discover(path1,pattern='lesson3.py') # discover方法会自动搜索特定路径下以.py结尾的文件模块中以test开头的用例
runner=HTMLTestRunner3_New.HTMLTestRunner(stream=f,
description='UI自动化测试执行情况如下',
title='CMS平台UI自动化测试',
tester='小程')
runner.run(discover)
class Cms(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
cls.driver=webdriver.Chrome()
cls.driver.get('http://cms.duoceshi.cn/cms/manage/login.do')
cls.driver.maximize_window()
cls.driver.implicitly_wait(5)
@classmethod
def tearDownClass(cls) -> None:
time.sleep(3)
cls.driver.close()
def test01(self):
self.driver.find_element(By.ID,'userAccount').send_keys('admin')
self.driver.find_element(By.ID,'loginPwd').send_keys('123456')
self.driver.find_element(By.ID,'loginBtn').click()
result=self.driver.find_element(By.XPATH,'/html/body/div/aside/div/dl[1]/dt').text #获取用户中心文本
self.assertEqual(result,'用户中心') #用于判断断言登录是否成功
if __name__ == '__main__':
path1 = 'D:\python\dcs31\duoceshi31_UI'
stime1=time.strftime('%Y-%m-%d-%H-%M-%S') #获取系统时间,避免相同文件内容被覆盖
print(stime1)
file_path=path1+"\\%s_ui_report.html"%stime1 #通过open函数自动生成html文件,open在写内容时,如果文件不存在会自动生成
with open(file_path,'wb') as f : #wb以二进制方式写入内容
discover=unittest.TestLoader().discover(path1,pattern='lesson3.py') # discover方法会自动搜索特定路径下以.py结尾的文件模块中以test开头的用例
runner=HTMLTestRunner3_New.HTMLTestRunner(stream=f,
description='UI自动化测试执行情况如下',
title='CMS平台UI自动化测试',
tester='小程')
runner.run(discover)
标签:-%,03,self,print,用例,UI,自动化,test,def From: https://www.cnblogs.com/jjm414/p/17262855.html