case/testcase中的test_exa.py文件
实现功能:
- 源道的登录
- 创建用例
- 修改用例
import unittest
from selenium import webdriver
from ddt import ddt, data, unpack
import time
from utils.log_cn import make_assert_action
import random
@ddt
class TestExa(unittest.TestCase):
@classmethod
def setUpClass(self) -> None:
self.driver = webdriver.Chrome()
self.driver.get('http://127.0.0.1/zentao/')
@classmethod
def tearDownClass(self) -> None:
self.driver.quit()
def setUp(self) -> None:
self.text_num = str(int(random.random()*100))
@data(('admin', '123456'))
@unpack
def test_1_login(self, user, pwd):
self.driver.find_element_by_id('account').send_keys(user)
self.driver.find_element_by_name('password').send_keys(pwd)
self.driver.find_element_by_id('submit').click()
time.sleep(2)
make_assert_action(self.driver, '我的地盘 - 禅道1', self.driver.title)
@data("这是unittest框架测试")
def test_2_add_case(self, text):
text = text + self.text_num
self.driver.find_element_by_xpath('//*[@id="navbar"]/ul/li[4]/a').click()
self.driver.find_element_by_xpath('//*[@id="subNavbar"]/ul/li[2]/a').click()
self.driver.find_element_by_xpath('//*[@id="mainMenu"]/div[3]/a[2]').click()
self.driver.find_element_by_xpath('//*[@id="title"]').send_keys(text)
self.driver.execute_script('scroll(0,1000)')
self.driver.find_elements_by_xpath('//button[text()="保存"]')[1].click()
time.sleep(2)
make_assert_action(self.driver, text, self.driver.page_source)
@data("这是经过修改后的unittest框架测试")
def test_3_edit_case(self, text):
text = text + self.text_num
self.driver.find_element_by_xpath('//*[@id="caseList"]/tbody/tr[1]/td[13]/a[3]/i').click()
self.driver.find_element_by_xpath('// *[ @ id = "title"]').clear()
self.driver.find_element_by_xpath('// *[ @ id = "title"]').send_keys(text)
time.sleep(1)
self.driver.execute_script('scroll(0,1000)')
self.driver.find_element_by_xpath('//*[@id="submit"]').click()
make_assert_action(self.driver, text, self.driver.page_source)
if __name__ == '__main__':
unittest.main()
case/testcase中的test_bug.py文件
实现功能:
- 源道的登录
- 创建bug
- 修改bug
import unittest
from selenium import webdriver
from ddt import ddt, data, unpack
import time
import random
from utils.log_cn import make_assert_action
@ddt
class TextDebug(unittest.TestCase):
@classmethod
def setUpClass(self) -> None:
self.driver = webdriver.Chrome()
self.driver.get('http://127.0.0.1/zentao/')
@classmethod
def tearDownClass(self) -> None:
self.driver.quit()
def setUp(self) -> None:
self.text_num = str(int(random.random()*100))
@data(('admin', '123456'))
@unpack
def test_1_login(self, user, pwd):
self.driver.find_element_by_id('account').send_keys(user)
self.driver.find_element_by_name('password').send_keys(pwd)
self.driver.find_element_by_id('submit').click()
time.sleep(2)
make_assert_action(self.driver, '我的地盘 - 禅道', self.driver.title)
@data("这是unittest框架bug测试")
def test_2_add_bug(self, text):
text = text + self.text_num
self.driver.find_element_by_xpath('//*[@id="navbar"]/ul/li[4]/a').click()
self.driver.find_element_by_xpath('//*[@id="subNavbar"]/ul/li[1]/a').click()
self.driver.find_element_by_xpath('//*[@id="mainMenu"]/div[3]/a[3]').click()
time.sleep(2)
self.driver.find_element_by_xpath('//*[@id="openedBuild_chosen"]/ul').click()
self.driver.find_element_by_xpath('//*[@id="openedBuild_chosen"]/div/ul/li').click()
self.driver.find_element_by_xpath('//*[@id="title"]').send_keys(text)
time.sleep(2)
self.driver.execute_script('scroll(0,1000)')
self.driver.find_element_by_xpath('//*[@id="submit"]').click()
time.sleep(3)
make_assert_action(self.driver, text, self.driver.page_source)
@data(("这是经过修改后的unittest框架debug测试", "这是提出的bug的解决方案"))
@unpack
def test_3_edit_bug(self, text, detail):
text = text + self.text_num
self.driver.find_element_by_xpath('//*[@id="bugList"]/tbody/tr[1]/td[11]/a[3]/i').click()
self.driver.find_element_by_xpath('//*[@id="title"]').clear()
self.driver.find_element_by_xpath('//*[@id="title"]').send_keys(text)
time.sleep(1)
self.driver.switch_to.frame(self.driver.find_element_by_xpath('//*[@id="dataform"]/div'
'[2]/div[1]/div/div[3]/div[2]/div/div[2]/iframe'))
self.driver.find_element_by_xpath('/html/body').send_keys(detail)
time.sleep(2)
# 返回根页面
self.driver.switch_to.default_content()
self.driver.execute_script('scroll(0,1000)')
self.driver.find_element_by_xpath('//*[@id="submit"]').click()
make_assert_action(self.driver, text, self.driver.page_source)
if __name__ == '__main__':
unittest.main()
utils中的tools.py文件
实现功能:
- 将实验报告发送至目标邮箱
import smtplib
from smtplib import datetime
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
# 发送邮件
def send_email(smtp_server=None, user=None, password=None, sender=None, receiver=None, path=None):
"""
:param smtp_server 远程邮箱服务器地址
:param user: 发送邮件人的用户名
:param password: 发送邮件人生成的16为密码
:param sender: 发送邮件人邮箱
:param receiver: 收件人邮箱
:param path:
:return:
"""
msg = MIMEMultipart()
# 附件
att = MIMEText(open(path, 'rb').read().decode('utf-8'), 'base64', 'gb2312')
att['Content-Type'] = 'application/octet-stream'
att['Content-Disposition'] = 'attachment; filename="result.html"'
msg.attach(att)
msg['Subject'] = Header('普通测试结果(' + str(datetime.date.today()) + ')', 'gb2312')
# 发件人
msg['From'] = sender
# 收件人
msg['To'] = receiver
# 正文内容
body = 'python test email'
msg.attach(MIMEText(body, 'plain'))
# 开启SMTP服务
stmp = smtplib.SMTP()
# 链接远程服务器
stmp.connect(smtp_server)
# 登录远程服务器
stmp.login(user, password)
# 发送邮件
stmp.sendmail(sender, receiver, msg.as_string())
# 关闭SMTP服务
stmp.quit()
if __name__ == '__main__':
send_email(smtp_server='smtp.sina.cn',
user='',
password='',
sender='',
receiver='',
path='文件路径')
utils中的tools.py文件
实现功能:
- 生成保存路径文件
- 自定义断言
- 出现错误时的屏幕截取
import os
import time
import unittest
from selenium import webdriver
# 创建日志文件
def make_report_dir(path):
# 文件目录
base_path = r'E:\projectOfPython\projectOfSelenuim\report'
final_path = os.path.join(base_path, path)
if not os.path.exists(final_path):
os.mkdir(final_path)
items = ['html', 'png']
for item in items:
inner_path = os.path.join(final_path, item)
if not os.path.exists(inner_path):
os.mkdir(inner_path)
def make_assert_action(driver, imagine, society):
try:
unittest.TestCase().assertIn(imagine, society)
except AssertionError:
get_error_screen(driver)
print("实际与预期不符合")
except Exception:
get_error_screen(driver)
print("意料之外的错误")
else:
print("成功执行")
finally:
time.sleep(2)
def get_error_screen(driver):
now = time.strftime("%y_%m_%d")
base_path = r'E:\projectOfPython\projectOfSelenuim\report'
filename = r"{}\{}\png\{}.png".format(base_path, now, now)
driver.get_screenshot_as_file(filename)
time.sleep(2)
if __name__ == '__main__':
now = time.strftime("%y_%m_%d")
make_report_dir(now)