Web UI自动化测试框架Seldom实战 三

1、seldom 实现Page objects设计模式

seldom API的设计理念已经将元素操作和元素定位做了整合,本身不太适合实现Page objects设计模式。poium 是Page objects设计模式最佳实践,如果想使用poium,需要单独安装。

将seldom与poium结合使用。

import seldom
from seldom import Seldom
from poium import Page, PageElement


class BaiduPage(Page):
    """baidu page"""
    search_input = PageElement(id_="kw")
    search_button = PageElement(id_="su")

class BaiduTest(seldom.TestCase):
    """Baidu serach test case"""

    def test_case(self):
        """
        A simple test
        """
        page = BaiduPage(Seldom.driver)
        page.get("https://www.baidu.com")
        page.search_input = "seldom"
        page.search_button.click()
        self.assertTitle("seldom_百度搜索")

if __name__ == '__main__':
    seldom.main()

2、seldom 生成测试数据

测试数据是测试用例的重要部分。但有时候我们不能把测试数据写死在测试用例中,seldom在testdata中__init__.py提供了随机获取测试数据的方法。

first_name() #
last_name()  #
username()  #用户名
get_birthday() #生日
get_date() #当前时间
get_digits() #复数
get_email() #emali
get_float()  #随机浮点数
get_future_datetime() #未来时间
get_int() #数字
get_int32() #32位的正数字
get_int64() #64位的正数字
get_md5() #md5值
get_now_time() #当前时间
get_past_datetime() #过去时间
get_uuid()  #uuid
get_word() #一个单词
get_words() #多个单词
import seldom
from seldom import testdata

class YouTest(seldom.TestCase):

    def test_case(self):
        #通过get_word() 随机获取一个单词,然后对这个单词进行搜索。
        word = testdata.get_word()
        self.open("https://www.baidu.com")
        self.type(id_="kw", text=word)
        self.click(css="#su")
        self.assertTitle(word + "_百度搜索")

if __name__ == '__main__':
    seldom.main()

3、seldom 跳过测试用例

seldom 通过main()方法运行测试用例只能指定到测试文件,但有时候我们一个测试文件可能会有很多测试类和方法。但在调试过程中之想执行某一部分用例,那么就可以设置用例的跳过。

import seldom
from seldom import testdata

@seldom.skip()  # 跳过测试类
class YouTest(seldom.TestCase):
    
    @seldom.skip()  # 跳过测试用例
    def test_case(self):
        #通过get_word() 随机获取一个单词,然后对这个单词进行搜索。
        word = testdata.get_word()
        self.open("https://www.baidu.com")
        self.type(id_="kw", text=word)
        self.click(css="#su")
        self.assertTitle(word + "_百度搜索")

if __name__ == '__main__':
    seldom.main()

4、seldom 发邮件功能

实例如下:

import seldom
from seldom.mail import SMTP

class Test(seldom.TestCase):

    def test_case(self):
        self.get("http://www.baidu.com")
        self.type(css="#kw", text="seldom")
        self.click(css="#su")
        self.wait(2)
        self.assertTitle("seldom_百度搜索")

if __name__ == '__main__':
    seldom.main()
    smtp = SMTP(user="you@126.com", password="abc123", host="smtp.126.com")
    smtp.sender(to="receive@mail.com", subject='Email title')

这里需要注意你的邮件服务器端口是什么,seldom中没有对特定的邮箱服务器做处理:

seldom中的实现如下:

class SMTP(object):

    def __init__(self, user, password, host, port=None):
        self.user = user
        self.password = password
        self.host = host
        self.port = str(port) if port is not None else "465"

    def sender(self, to=None, subject=None, contents=None, attachments=None):
        .......
        .......
    
        try:
            smtp = smtplib.SMTP()
            smtp.connect(self.host)
            smtp.login(self.user, self.password)
            smtp.sendmail(self.user, to, msg.as_string())
            smtp.quit()
            log.info(" 📧 Email sent successfully!!")
        except BaseException as msg:
            log.error('❌ Email failed to send!!' + str(msg))

python标准库中的smtplib模块,给我们提供了一组连接SMTP服务器发送邮件的接口。

#连接SMTP服务器未加密的25号端口,使用smtplib.SMTP接口;
smtp = smtplib.SMTP()
smtp.connect(self.host,self.prot)
smtp.login(self.user, self.password)
#连接SMTP服务器SSL加密的465端口,使用smtplib.SMTP_SSL接口; smtp = smtplib.SMTP_SSL(self.host,self.prot) smtp.login(self.user, self.password) #连接TLS的587端口,使用smtplib.SMTP接口; smtp = smtplib.SMTP(self.host, self.prot) smtp.starttls()
smtp.login(self.user, self.password)

5、seldom设置前置步骤

在编写自动化测试用例的过程中,我们需要设置前置步骤。这时候就需要将一些前置动作放到case.py中的start()/start_class()中,将一些前置动作放到case.py中的end()/end_class()中。

5.1、当你想在每条用例开始之前执行的动作,放到start()/end()方法中。

import seldom

class TestCase(seldom.TestCase):

    def start(self):
        print("一条测试用例开始")
        self.get("https://www.baidu.com")
    
    def end(self):
        print("一条测试结果")
        self.assertInTitle("百度搜索")

    def test_search_seldom(self):
        self.type_enter(id_="kw", text="seldom")
        
    def test_search_poium(self):
        self.type_enter(id_="kw", text="poium")

#...

5.2、当你想在测试类开始之前执行一些动作,到start_class()/end_class()类方法。

import seldom

class TestCase(seldom.TestCase):

    def start_class(self):
        print("测试类开始执行")
        self.get("https://www.baidu.com")

    def end_class(self):
        print("测试类结束执行")
        self.assertInTitle("百度搜索")

    def test_search_seldom(self):
        self.type_enter(id_="kw", text="seldom", clear=True)

    def test_search_poium(self):
        self.type_enter(id_="kw", text="poium", clear=True)

 

posted @ 2020-11-05 22:05  Water_you  阅读(733)  评论(0编辑  收藏  举报