selenium项目实战--源道

case/testcase中的test_exa.py文件

实现功能:

  1. 源道的登录
  2. 创建用例
  3. 修改用例
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文件

实现功能:

  1. 源道的登录
  2. 创建bug
  3. 修改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文件

实现功能:

  1. 将实验报告发送至目标邮箱
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文件

实现功能:

  1. 生成保存路径文件
  2. 自定义断言
  3. 出现错误时的屏幕截取
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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值