python 用selenium做自动化测试:
在w3school里搜索css
python3 test_w3school_search.py
XPath路径表达式:
http://www.ruanyifeng.com/blog/2009/07/xpath_path_expressions.html阮一峰
1.基于Python的Selenium自动化测试
练习实例,把官方教程中能实现的方法都实现一下(在上面的案例中进行更改)
直接执行:直接用unittest.main()
执行,这里它搜索所有以test开头的测试用例方法,按照ASCII的顺序执行多个用例。
-
与页面交互(输出W3School中HTML教程中的相关列表文本)
因为我没有用到测试套件,所以测试的时候打开了两次浏览器,但其实在第一次打开浏览器的时候就已经看到了输出,代码如下:
class W3schoollist(unittest.TestCase): 26 def setUp(self): 27 binary=FirefoxBinary('/usr/local/firefox/firefox') 28 self.driver=webdriver.Firefox(firefox_binary=binary) 29 def test_list_in_w3school(self): 30 driver=self.driver 31 driver.get("http://www.w3school.com.cn") #google开发者工具里面可以直接copy XPath. 32 elems=driver.find_elements_by_xpath("//*[@id='navsecond']/ul[1]/li") 33 for ele in elems: 34 print ele.text 35 def tearDown(self): 36 self.driver.close()
- 选择下拉列表,处理
SELECT
元素
2.Selenium和unittest结合
3.Test Suites
参考:https://blog.csdn.net/u011436666/article/details/73473013
用测试套件的形式组织一下测试(就使用与页面交互的案例中的两个测试用例):
1 import unittest
2 from selenium import webdriver
3 from selenium.webdriver.common.keys import Keys
4 from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
5 class W3schooltest(unittest.TestCase):
6
7 def setUp(self):
8 binary = FirefoxBinary('/usr/local/firefox/firefox')
9 self.driver = webdriver.Firefox(firefox_binary=binary)
10 self.driver.implicitly_wait(10)
11
12
13 def test_search_in_w3school(self):
14 driver = self.driver
15 driver.get("http://www.w3school.com.cn")
16 self.assertIn("w3school",driver.title)
17
18 elem=driver.find_element_by_name("as_q")
19 elem.send_keys("css")
20 elem.send_keys(Keys.RETURN)
21 elem.submit()
22 assert "No results found." not in driver.page_source
23 print("test01")
24
可以看到运行的两个测试是按照我调用的顺序来的,test2->test1
4.Selenium-grid
Selenium-Grid可以测试集分布在多个环境中并行运行测试用例。这有两个好处。 首先,如果你有一个大的测试集或者一个运行缓慢的测试集,你可以通过使用Selenium Grid来划分你的测试集,同时使用这些不同的机器来运行不同的测试。另外,如果您必须在多个环境中运行测试套件,您可以让不同的远程机器同时支持并运行您的测试。 在每种情况下,Selenium Grid通过使用并行处理大大缩短了运行套件所需的时间。
这个的使用后期研究后会再总结~
5.美化报告样式和发送结果邮件:
参考:https://blog.csdn.net/u011436666/article/details/73473013
1 import unittest
2 import smtplib
3 from email.mime.text import MIMEText
4 from email.header import Header
5 import time
6 import HTMLTestRunner
7 from email.mime.application import MIMEApplication
8 #发送邮件
9 def send_email(report_file):
10 sender = "*@qq.com"
11 receiver="*@qq.com"
12 smtpserver="smtp.qq.com"
13 username="*@qq.com"
14 password="授权码"
15 #邮件正文
16 file=open(report_file,"rb")
17 mail_body=file.read()
18 file.close()
19
20 msg=MIMEText(mail_body,_subtype="html",_charset="utf-8")
21 msg["Subject"]= u"test_report"
22
23 smtp=smtplib.SMTP_SSL("smtp.qq.com")
24 smtp.login(username,password)
25 smtp.sendmail(sender,receiver,msg.as_string())
26 smtp.quit()
27 print("Email has send out!")
#将用例添加到测试套件中
28 def creatsuite():
29 testunit=unittest.TestSuite()
30 test_dir=".//testcase"
31 discover=unittest.defaultTestLoader.discover(test_dir,pattern="test*.py",top_level_dir=None)
32 for test_suite in discover:
33 for test_case in test_suite:
34 testunit.addTest(test_case)
将HTMLTestRunner.py移入python安装目录(仅支持python2,网上有教程可以修改到支持py3):
mv HTMLTestRunner.py /usr/lib/python2.7/site-packages/
注意:密码是qq邮箱第三方授权码!!!,如果你使用自己的密码则会报错:
smtplib.SMTPAuthenticationError: (535, 'Error: \xc7\xeb\xca\xb9\xd3\xc3\xca\xda\xc8\xa8\xc2\xeb\xb5\xc7\xc2\xbc\xa1\xa3\xcf\xea\xc7\xe9\xc7\xeb\xbf\xb4: http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256')
这是发到我邮箱的: