python 用selenium做自动化测试

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')

在这里插入图片描述

这是发到我邮箱的:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/nicezheng_1995/article/details/82960881