# 28、我们之前写的脚本叫线性脚本,现在需要封装
# from selenium import webdriver
# from time import sleep
# driver = webdriver.Chrome()
#
# driver.get('http://cms.duoceshi.cn/cms/manage/login.do')
# driver.maximize_window()
# driver.find_element_by_id('userAccount').send_keys('admin')
# driver.find_element_by_id('loginPwd').send_keys('123456')
# driver.find_element_by_id('loginBtn').click()
# from selenium import webdriver
# from time import sleep
# driver = webdriver.Chrome()
# class Cms:
# def __init__(self): #构造函数
# self.driver = webdriver.Chrome()
# self.driver.get('http://cms.duoceshi.cn/cms/manage/login.do')
# self.driver.maximize_window()
#
# def login(self):
# '''
# 封装一个登录函数
# :return:
# '''
# 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()
# sleep(3)
# def center(self):
# '''
# 封装一个操作用户中心
# :return:
# '''
# self.driver.find_element_by_xpath('//*[@id="menu-user"]/dt').click()
#
# if __name__ == '__main__':
# c = Cms() #创建一个对象c
# c.login()
# c.center()
# 29、为了解决用例分离的问题,我们要引入unittest单元测试框架
# python中里面有哪些单元测试框架?
# unittest pytest nose junit
# unittest 单元测试框架作用:测试主要用来组织和管理我们的ui自动化用例
# 类的开始
# 方法的开始
# 用例1运行
# 方法的结束
# 方法的开始
# 用例2运行
# 方法结束
# 类的结束
# import unittest #导入这个unittest模块
#
# # unittest 单元测试框架基本格式
#
# class Test(unittest.TestCase):
#
# @classmethod # 装饰器,不影响原有的功能,增加新功能,只会运行一次
# def setUpClass(cls) -> None: # 类的开始
# print('类的开始')
#
# @classmethod
# def tearDownClass(cls) -> None: #类的结束
# print('类的结束')
#
# def setUp(self) -> None: #在每个方法运行之前都会运行一遍,释放资源,关闭浏览器
# print('方法的开始')
#
# def tearDown(self) -> None:
# print('方法的结束')
#
# def test02(self):
# print(222)
#
# def test01(self):
# print(111)
#
# def test_a(self):
# print(444)
#
# def test_B(self):
# print(333)
#
# def dcs(self): #这个不会运行不是test开头
# print(555)
# # 运行结果解释:
# # unittest框架运行的用例是要以test开头,运行顺序是根据ASCII排序先数字--大写字母--
# # 小写字母 ,unittest框架有setup 和teardown 开始和结束的工作,释放资源
#
# if __name__ == '__main__':
# unittest.main() #unittest 框架是运行用例的入口,main是函数,作用就是
# #运行所有的用例
# 需求:百度搜python和selenium
import unittest
from selenium import webdriver
from time import sleep
from dcs7_auto_ui.HTMLTestRunner3_New import HTMLTestRunner
class Baidu_Test(unittest.TestCase):
def setUp(self) -> None: #方法的开始
self.driver = webdriver.Chrome()
self.driver.get('http://www.baidu.com')
self.driver.maximize_window()
self.driver.implicitly_wait(10)
def tearDown(self) -> None: #方法的结束
sleep(5)
self.driver.close() #退出浏览器
def test01(self):
self.driver.find_element_by_id('kw').send_keys('python')
def test02(self):
self.driver.find_element_by_id('kw').send_keys('selenium')
#第一种运行方法所有的用例
# if __name__ == '__main__':
# unittest.main()
#第二种方法:把用例装进一个套件里面
# def all_case():
# suite = unittest.TestSuite() #创建一个suite对象,就像一个容器一样,用来装测试用来
# # 1)运行单条用例
# # suite.addTest(Baidu_Test('test01'))
# # suite.addTest(Baidu_Test('test02'))
# #把test01这个用例装进suite套件里面
#
# # 2)运行多条用例
# suite.addTests([Baidu_Test('test01'),Baidu_Test('test02')])
# return suite #把装好的用例suite套件返回给到函数,谁调用了函数谁就拿到了结果
#
# if __name__ == '__main__':
# # 第二种方法运行套件里面的用例
# runner = unittest.TextTestRunner() #根据TextTestRunner类创建一个runner对象
# # 然后runner调用run运行用例
# runner.run(all_case())
# 第三种运行用例的方法
# 运行用例:自动化搜索用例+自动运行+生成测试报告
if __name__ == '__main__':
start_dir = 'C:\my_project\dcs\dcs7_auto_ui' #找用例的路径
filename = r'C:\my_project\dcs\dcs7_auto_ui'+'\\ui_report.html' #存放报告文件的路径及报告名称
f = open(filename,'wb') #wb 是二进制的方式往filename文件里面写入用例运行后的报告
discover = unittest.defaultTestLoader.discover(start_dir,pattern='lesson*.py')
# defaultTestLoader是TestLoader类的对象,
#自动化搜索用例# discover 方法会自动化搜索指定的路径以lesson开
# 头并且以.py结尾的模块以test开头的用例
runner = HTMLTestRunner(stream=f,title='百度ui自动化测试报告',
description='用例执行情况如下:',tester='小段')
runner.run(discover) #运行用例
|
|