51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 494|回复: 0
打印 上一主题 下一主题

[原创] Web UI自动化测试框架Seldom实战分享(下)

[复制链接]
  • TA的每日心情
    无聊
    8 小时前
  • 签到天数: 935 天

    连续签到: 2 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2023-2-22 13:32:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    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)



    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-4-23 17:57 , Processed in 0.062870 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表