编写了很多个测试用例,可以一次性全部执行并且实现截图
在自学测试时,发现自动化测试需要写很多个测试用例并且自己只能实现单个执行。于是找到了可以同时执行的方法
unittest.defaultTestLoader.discover'用例存放的目录', pattern='匹配的文件条件')
下面附上完整代码,包括两个用例模块,一是对登录功能的测试(test_login.py),二是对主界面功能的测试(test_mian.py)以及执行用代码(run_all_case.py)
# 用户登录测试
# coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import unittest
import time
class login_case(unittest.TestCase):
def setUp(self):
print('开始测试登录模块')
# 定义登录方法 主体
def login(self, username, password):
self.web = webdriver.Ie("D:\个人应用\python\IEDriverServer.exe")
self.web.get("http://10.116.254.230/") # 登录页面 例如https://www.baidu.com
self.web.maximize_window()
# 定位元素 打开登录页根据网站实际操作去定位登录元素
# self.web.find_element_by_class_name('register_login_btn').click()
self.web.find_element_by_css_selector("input[type='text']").send_keys(username) # 定位元素 用户名
self.web.find_element_by_css_selector("input[type='password']").send_keys(password) # 定位元素 密码
self.web.find_element_by_css_selector("button").send_keys(Keys.ENTER)
def test_login_success(self):
# '''用户名、密码正确'''
self.login('admin', '123456') # 正确用户名和密码
self.web.get_screenshot_as_file("C:\\Users\\QQ\\PycharmProjects\\untitled\\result\\login\\test_login_success.png")
def test_login_pwd_error(self):
# 用户名正确、密码不正确
self.login('admin', '1') # 正确用户名,错误密码
error_message = self.web.find_element_by_css_selector("[class='title']>span").text
self.assertIn('登录失败', error_message) # 用assertIn(a,b)方法来断言 a in b '用户名或密码错误'在error_message里
self.web.get_screenshot_as_file("C:\\Users\\QQ\\PycharmProjects\\untitled\\result\\login\\login_pwd_error.png")
def test_login_pwd_null(self):
# 用户名正确、密码为空
self.login('admin', '') # 密码为空
# 等待时间手动处理。
error_message = self.web.find_element_by_css_selector("[class='title']>span").text
self.assertIn('登录失败', error_message) # 用assertIn(a,b)方法来断言 a in b '用户名或密码错误'在error_message里
self.web.get_screenshot_as_file("C:\\Users\\QQ\\PycharmProjects\\untitled\\result\\login\\login_pwd_null.png")
def test_login_user_error(self):
# 用户名错误、密码正确
self.login('admins', '123456') # 密码正确
# 等待时间手动处理。
error_message = self.web.find_element_by_css_selector("[class='title']>span").text
self.assertIn('登录失败', error_message) # 用assertIn(a,b)方法来断言 a in b '用户名或密码错误'在error_message里
self.web.get_screenshot_as_file("C:\\Users\\QQ\\PycharmProjects\\untitled\\result\\login\\test_login_user_error.png")
def test_login_user_null(self):
# 用户名为空、密码正确
self.login('', '123456') # 用户名为空,密码正确
# 等待时间手动处理。
error_message = self.web.find_element_by_css_selector("[class='title']>span").text
self.assertIn('登录失败', error_message) # 用assertIn(a,b)方法来断言 a in b '用户名或密码错误'在error_message里
self.web.get_screenshot_as_file("C:\\Users\\QQ\\PycharmProjects\\untitled\\result\\login\\test_login_user_null.png")
def tearDown(self):
print('完成测试')
self.web.quit()
if __name__ == "__main__":
unittest.main()
下面是主页面模块测试
# 系统模块测试
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import unittest
import time
class personalCenter_case(unittest.TestCase):
def setUp(self):
print('开始测试系统模块')
url = "http://10.116.254.230/"
self.web = webdriver.Ie("D:\个人应用\python\IEDriverServer.exe")
self.web.implicitly_wait(10)
self.web.maximize_window() # 浏览器最大化
self.web.get(url) # 登录页面 例如https://www.baidu.com
# self.web.find_element_by_class_name('register_login_btn').click()
self.web.find_element_by_css_selector("input[type='text']").send_keys('admin') # 定位元素 用户名
self.web.find_element_by_css_selector("input[type='password']").send_keys('123456') # 定位元素 密码
self.web.find_element_by_css_selector("button").send_keys(Keys.ENTER)
def test_person_add(self):
self.web.implicitly_wait(10)
button = self.web.find_element_by_xpath("//div[@class='header-ipc']//li[5]")
self.web.execute_script("$(arguments[0]).click()", button)
time.sleep(1)
self.web.get_screenshot_as_file("C:\\Users\\QQ\\PycharmProjects\\untitled\\result\\person\\test_person.png")
self.web.find_element_by_xpath("//div[@class='left-menu']//div[3]//div").click()
button = self.web.find_element_by_xpath("//div[@class='left-menu']//div[3]//ul/li[2]")
self.web.execute_script("$(arguments[0]).click()", button)
self.web.find_element_by_xpath("//div[@class='operation']/button[2]").send_keys(Keys.ENTER)
self.web.find_element_by_xpath("//div[@class='add-form']//div[1]//input").send_keys('test2')
self.web.find_element_by_xpath("//div[@class='add-form']/form/div[3]//input").send_keys('123456')
self.web.find_element_by_xpath("//div[@class='add-form']/form/div[4]//input").send_keys('abcdefg')
self.web.find_element_by_xpath("//div[@class='add-form']/form/div[6]//input").send_keys('abcdefg')
self.web.find_element_by_xpath("//div[@class='add-form']/form/div[3]//input").send_keys('123456')
self.web.find_element_by_xpath("//div[@class='user-manage']/div[4]/div/div[3]//button[1]").send_keys(Keys.ENTER)
time.sleep(2)
self.web.get_screenshot_as_file("C:\\Users\\QQ\\PycharmProjects\\untitled\\result\\person\\test_person_add.png")
# def test_person_show(self):
#
# self.web.implicitly_wait(10)
#
# button = self.web.find_element_by_xpath("//div[@class='header-ipc']//li[5]")
#
# self.web.execute_script("$(arguments[0]).click()", button)
#
# time.sleep(1)
def tearDown(self):
print('完成测试')
self.web.quit()
最后是执行代码,因为我的文件都是以test开头,所以在匹配的文件条件上选择了pattern=test*.py,这样可以搜索到所有以test开头的py文件
# coding:utf-
# 将所有测试用例一次性执行
# import os 可以导入相对路径
import unittest
import os
# 待执行用例的目录
def allcase():
case_dir = r"C:\Users\QQ\PycharmProjects\untitled"
# 相对路劲的设置方式
# case_path=os.path.join(os.getcwd(),"case")
testcase = unittest.TestSuite()
# 执行所有以test开头的py文件
discover = unittest.defaultTestLoader.discover(case_dir, pattern='test*.py')
# discover方法筛选出来的用例,循环添加到测试套件中
# print(discover)
for test_suite in discover:
for test_case in test_suite:
# 添加用例到testcase
print(test_case)
testcase.addTest(test_case)
return testcase
if __name__ == "__main__":
runner = unittest.TextTestRunner()
runner.run(allcase())
本文介绍了一种使用unittest框架进行自动化测试的方法,通过编写多个测试用例并利用discover方法批量执行,实现了对登录功能和主界面功能的自动化测试,并在测试过程中自动生成截图,方便后续的错误排查。

3641

被折叠的 条评论
为什么被折叠?



