Web UI自动化测试框架Seldom实战(下)

发表于:2023-2-22 09:18

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Water_you    来源:博客园

  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小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号