最近在学习自动化,就拿项目练练手,写了一小部分,其余的都一样,只不过是重复的工作,就只写了两个模块
一:代码框架的搭建
框架搭起来,就是头部,中间,尾部,我说的是我代码的结构...
1,头部,当然是指头文件,email和password是后台的登录密码和邮箱,不能展示,嘿嘿
2,中间,是整体的中间的,自动化测试用例,多少条看你个人定,多少个函数就多少条,一个函数就是一个测试用例,也就是一个流程,我是这样写的:
setUp()的意思是每次测试用例执行的时候,它都要执行一次
tearDown()的意思是退出页面,也是每执行测试用例一次,它也会执行一次
class testVideo(unittest.TestCase):
def setUp(self):
pass:
def 你创建的函数名(self):
pass:
....
def tearDown(self):
self.driver.quit()
3,尾部,再次强调是我代码的尾部
testunit.addTest(测试类名(‘测试用例函数名’)),想加入多少条就多少条;
filename存放的位置最好是和代码文件存放在一起吧
if __name__ == "__main__":
#定义一个单元测试容器
testunit=unittest.TestSuite()
#将测试用例加入进去
testunit.addTest(testVideo('switch_window'))
testunit.addTest(testVideo('test_user'))
testunit.addTest(testVideo('user_manage'))
#我存放的位置和代码文件存放的位置是一样的
filename='D://video//testCase1//r.html'
fp=open(filename,'wb')
#自定义测试报告
runner=HTMLTestRunner.HTMLTestRunner(
stream=fp,
title='serendipity测试报告',
description='用例执行情况'
)
#运行测试
runner.run(testunit)
fp.close()
二:上代码:
import unittest
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
from time import sleep
import HTMLTestRunner
url='https://admin.serendipvideo.com/#/login'
email='[email protected]'
password='wcx'
class testVideo(unittest.TestCase):
#启动浏览器
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.get(url)
self.driver.find_element_by_xpath('//input[@autocomplete]').send_keys(email)
input2 = self.driver.find_element_by_xpath('//input[@type="password"]').send_keys(password)
button = WebDriverWait(self.driver,5,0.5).until(
EC.presence_of_element_located((By.XPATH,'//button'))
)
button.click()
#句柄切换函数
def switch_window(self):
window_1 = self.driver.current_window_handle
windows = self.driver.window_handles
for current_window in windows:
if current_window !=window_1:
self.driver.switch_to_window(current_window)
print(self.driver.current_url)
#用户管理
def test_user(self):
sleep(5)
print(self.driver.current_url)
#点击用户管理
user_manage = WebDriverWait(self.driver,4,0.5).until(
EC.presence_of_element_located((By.XPATH, '//div[@class="ivu-menu-submenu-title"]'))
)
user_manage.click()
#点击app用户
app_user = WebDriverWait(self.driver,5,0.5).until(
EC.presence_of_element_located((By.XPATH,'//li[@class="ivu-menu-item"]'))
)
app_user.click()
#用户名搜索
user_search = WebDriverWait(self.driver,5,0.5).until(
EC.presence_of_element_located((By.XPATH,'//input[@autocomplete="off"]'))
)
#文件中是用户名
filename='username.txt'
with open(filename) as file_object:
for line in file_object:
print(line)
user_search.send_keys(line)
#搜索按钮
search_button=WebDriverWait(self.driver,4,0.5).until(
EC.presence_of_element_located((By.XPATH,'//div[@class="ivu-input-group-append ivu-input-search"]'))
)
user_search.clear()
sleep(5)
search_button.click()
#导出用户
export_user=WebDriverWait(self.driver,6,0.5).until(
EC.presence_of_element_located((By.XPATH,'//button[@class="ivu-btn ivu-btn-primary"]'))
)
export_user.click()
#管理员
def user_manage(self):
sleep(5)
#点击用户管理
manager_manage = WebDriverWait(self.driver,4,0.5).until(
EC.presence_of_element_located((By.XPATH, '//div[@class="ivu-menu-submenu-title"]'))
)
manager_manage.click()
#点击管理员
user_manager = WebDriverWait(self.driver,4,0.5).until(
EC.presence_of_element_located((By.XPATH,'//*[@id="app"]/div/div[1]/div[1]/div/ul/li[1]/ul/li[2]'))
)
user_manager.click()
#点击用户个人信息编辑
wcx_manage = WebDriverWait(self.driver,5,0.5).until(
EC.presence_of_element_located((By.XPATH,'//*[@id="app"]/div/div[2]/div[2]/div/div[2]/div/div[2]/div/div[1]/div/div[2]/table/tbody/tr[5]/td[4]/div/div/button[1]/span'))
)
wcx_manage.click()
self.driver.maximize_window()
sleep(6)
#编辑管理员的名字
user_name = WebDriverWait(self.driver,5,0.5).until(
EC.presence_of_element_located((By.XPATH,'/html/body/div[11]/div[2]/div/div/div[2]/form/div[1]/div/div/input'))
)
user_name.clear()
user_name.send_keys('wcx')
sleep(5)
#添加新用户
add_user = WebDriverWait(self.driver,5,0.5).until(
EC.presence_of_element_located((By.XPATH,'//button[@class="ivu-btn ivu-btn-primary"]'))
)
add_user.click()
#输入用户名
add_user_name=WebDriverWait(self.driver,5,0.5).until(
EC.presence_of_element_located((By.XPATH,'/html/body/div[11]/div[2]/div/div/div[2]/form/div[1]/div/div/input'))
)
add_user_name.send_keys('wcx')
#退出
def tearDown(self):
self.driver.quit()
if __name__ == "__main__":
#定义一个单元测试容器
testunit=unittest.TestSuite()
#将测试用例加入进去
testunit.addTest(testVideo('switch_window'))
testunit.addTest(testVideo('test_user'))
testunit.addTest(testVideo('user_manage'))
#定义报告存放的路径,支持相对路径
filename='D://video//testCase1//r.html'
fp=open(filename,'wb')
#自定义测试报告
runner=HTMLTestRunner.HTMLTestRunner(
stream=fp,
title='serendipity测试报告',
description='用例执行情况'
)
#运行测试
runner.run(testunit)
fp.close()
其实挺简单的,加油
三:上html报告: