51Testing软件测试论坛

标题: Web UI自动化测试框架Seldom实战分享(下) [打印本页]

作者: lsekfe    时间: 2023-2-22 13:32
标题: 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)








欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2