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)