一、Selenium 简介
1、Selenium:是一个Web应用程序测试的工具,支持多平台、多浏览器、多语言去实现自动化测试。目前在Web自动化领域应用越来越广泛
2、Selemium工作原理:Selenium 主要用于Web端应用程序的自动化测试
3、Selenium 的特点:
- 开源、免费
- 多浏览器支持:FireFox、Chrome、IE
- 多语言支持:Java、Python、Ruby、JavaScript、C++
- 对Web页面有良好的支持
- 简单、灵活
- 支持分布式测试用例执行
二、环境配置
1、下载软件Pycharm
下载地址:https://www.jetbrains.com/pycharm/download/
2、安装Python环境
参考文档:https://www.jianshu.com/p/54baeae912fc
查看pyhoth环境所在的位置:which python3.7
3、安装pip
命令行: sudo easy_install pip
4、下载浏览器的驱动
参考文档: https://www.jianshu.com/p/18d2a36f5a33
Chrome的驱动对照表 (驱动版本和浏览器版本必须对应)
驱动放在python所在的bin文件下:open /usr/local/bin
5、安装所需要的库或者SDK
方式一: pip install selenium
方式二:直接在pycharm-Project Interpreter里面进行安装
三、Unittest 框架
1、简介:Python语言下的单元测试框架,是Python语言自带的单元测试框架
2、unittest中的4个重要概念:
- TestCase:一个TestCase的实例就是一个测试用例;测试用例流程:包含测试前准备环境的搭建 setUp, 实现测试过程的代码run, 以及测试后环境的还原tearDown.
- Test Sutie: Test Suite用来组装单个测试用例。可以通过addTest加载到TestCase到TestSuite中,从而返回一个TestSuite实例
- Test Runner: 通过TextTestRunner 类提供的run()方法来执行 test sutie/test case.
- Test Fixure:对一个测试用例环境的搭建和销毁,这个测试用例中需要访问数据库,可以在setUp()中通过建立数据库连接来进行初始化,在tearDown()中清除数据库产生的数据,然后关闭连接等。tearDown的过程很重要,要为下一个test case留下一个干净的环境
class baseUnit(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
cls.driver = webdriver.Chrome('/usr/local/bin/chromedriver')
cls.driver.maximize_window()
cls.driver.implicitly_wait(10)
cls.base_url = "https://XX.XX.com/login"
cls.driver.title
@classmethod
def tearDownClass(cls) -> None:
cls.driver.quit()
四、元素定位的方法
1、 http://note.youdao.com/s/TKEqaFcu
1、id定位: driver.find_element_by_id("txtUaserName").send_keys("容音@lily")
2、name定位:driver.find_element_by_name("username").send_keys("容音@lily")
3、class定位:driver.find_element_by_class_name("")
4、tag定位:driver.find_element_by_tag_name("input")
5、link定位: driver.find_element_by_link_text("忘记密码").click()
6、XPath定位:driver.find_element_by_xpath(“/html/body/div/div[2]/div[1]/div[3]/div/button").click()
五、测试用例执行顺序和执行方法
1、测试用例执行顺序:
unittest框架默认根据ASCII码的顺序加载测试用例,数字与字母的顺序为:0-9,A~Z,a~z; 所以TestAdd类会优先于TestBdd类执行,test_aaa()方法会优先于test_ccc()被执行,因而它并没有按照用例从上到下执行
2、测试用例的执行:
unittest提供了可以共享的defaulTestLoader类,可以使用其子类和方法创建实例,discover()方法就是其中之一。
test_dir = '/Users/XX/Desktop/Study/ui_test_admin/test_case'
discover = unittest.defaultTestLoader.discover(test_dir, pattern=‘test*.py')
if __name == ‘__main__’:
runner = unittest.TextTestRunner()
runner.run(discover)
test_dir: 要测试的模块名或测试用例目录
pattern:是用例的文件名
六、HTML TestRunner 生成测试报告
1、HTMLTestRunner 是Python标准库 unitest单元测试框架的一个扩展,它生成易于使用的HTML测试报告
if __name__ == '__main__':
#按照一定格式获取当前时间
now = time.strftime("%Y-%m-%d %H-%M-%S")
filename = now+'result.html'
通过open()方法以二进制写模式打开当前目录下的result.html,如果没有,则自动创建该文件。
fp = open(filename, 'wb')
#定义测试报告:stream指定测试报告文件, title用于定义测试报告的标题,description用于 定义测试报告的副标题。
runner = HTMLTestRunner(stream=fp, verbosity=2, title='Admin报告', description='用例执行情况:')
# 运行项目组装的用例
runner.run(discover)
# 关闭报告文件
fp.close()
2、用例成功的测试报告
3、用例失败的测试报告
七、用例截图
def insert_img(driver, file_name):
pfilename = "/Users/XX/Desktop/Study/ui_test_admin/images"
file_path = pfilename + "/" + file_name
if Path(pfilename).is_dir():
pass
else:
Path(pfilename).mkdir()
driver.get_screenshot_as_file(file_path)
if __name__ == '__main__':
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
insert_img(driver, '../images/admin.png')
driver.quit()
八、测试报告通过邮件发送
1、SMTP是简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式
2、Python的smtplib 模块提供了一种很方便的途径用来发送电子邮件。可以使用SMTP对象的sendmail方法发送邮件
3、发送邮件
smtp = smtplib.SMTP_SSL(mailserver, port=465) # 非QQ邮箱,一般使用SMTP即可,不需要有SSL
smtp.login(userName_SendMail, userName_AuthoCode)
smtp.sendmail(userName_SendMail, received_mail, msg.as_string())
smtp.quit()
send_email(new_report_addr)
九、jenkins部署
1、 安装三个插件:Startup Trigger、Groovy、HTML Publisher
2、项目-Configure- Build进行配置
3、生成一个HTML Report