关于自动化Python+Selenium的自动化测试思路——之线性脚本篇
经过最近的学习虫师的Python的自动化测试,了解到了。入门学习中的一种方式,线性脚本篇
线性脚本的编写,代表的是每个py都是一个test_case,各自独立。如下面测试126的脚本为例
第一部分: 首先为了完成自动化测试,需要确定目录结构:
image.png如图所示:
image文件夹: 是用于脚本运行中,对于一些地方的截图
report文件夹: 是用于脚本运行后,生成的报告存储
test_case文件夹: 顾名思义,就是存放每个测试用例py的脚本地方(!!!!!!重要)
test_case_execl文件夹: 是用于存放项目中的execl用例,该用例对应的是test_case中的脚本(1:1对应关系)
test_project文件夹: 主要是用于项目最后集成运行的脚本,主要是查找运行的case脚本,输出报告,并发送到指定邮箱(!!!!!!重要)
了解了文件夹,目前下面只对test_case和test_project做处理介绍:
第二部分: test_case的结构
image.png如图,每个test_*都是一个功能或者流程的case
已其中一个为例子:
1. __author__ = 'Administrator'
2. # coding=utf-8
3. from selenium import webdriver
4. import unittest
5. from selenium.webdriver.common.by import By
6. import time
7. class TestSwitchTabClass(unittest.TestCase):
8. def setUp(self):
9. self.browser = webdriver.Chrome()
10. self._126_url = "http://www.126.com/"
11. def test_126_switchtoshoujianxiang(self):
12. browser = self.browser
13. browser.get(self._126_url)
14. browser.maximize_window()
15. browser.implicitly_wait(10)
16. # driver.find_element(By.CSS_SELECTOR, "div.inputbox > div > input[name = 'email']").clear()
17. browser.switch_to.frame(browser.find_element_by_id("x-URS-iframe"))
18. browser.find_element_by_xpath(".//input[@name='email']").clear()
19. browser.find_element_by_xpath(".//input[@name='email']").send_keys("username")
20. #应保密,请使用自己的126邮箱帐号
21. browser.find_element(By.NAME, "password").clear()
22. browser.find_element(By.NAME, "password").send_keys("pwd")
23. browser.find_element(By.ID, "dologin").click()
24. browser.implicitly_wait(10)
25. browser.find_element(By.ID, "_mail_tabitem_3_43text").click()
26. time.sleep(4)
27. # assert_text = driver.find_element(By.CSS_SELECTOR, "div a.gIbx-ext-txtLink").text
28. # print assert_text
29. def test_addemailtoshoujianxiang(self):
30. browser = self.browser
31. browser.get(self._126_url)
32. browser.maximize_window()
33. browser.implicitly_wait(5)
34. """登录126"""
35. browser.switch_to.frame(browser.find_element_by_id("x-URS-iframe"))
36. browser.find_element_by_xpath(".//input[@name='email']").clear()
37. browser.find_element_by_xpath(".//input[@name='email']").send_keys("")
38. #应保密,请使用自己的126邮箱帐号
39. browser.find_element(By.NAME, "password").clear()
40. browser.find_element(By.NAME, "password").send_keys("")
41. browser.implicitly_wait(3)
42. browser.find_element(By.ID, "dologin").click()
43. time.sleep(5)
44. """点击写信进入写信界面"""
45. browser.find_element(By.XPATH, "//span[text()='写 信']").click()
46. browser.implicitly_wait(3)
47. """写入邮件主题"""
48. write_subject = browser.find_element(By.XPATH, '//input[@class="nui-ipt-input" and @maxlength="256"]')
49. write_subject.click()
50. write_subject.send_keys(u"写入主题")
51. """写入邮件内容"""
52. current_windowsname = browser.current_window_handle
53. browser.switch_to.frame(browser.find_element(By.CLASS_NAME, 'APP-editor-iframe'))
54. write_content = browser.find_element(By.CSS_SELECTOR, ".nui-scroll")
55. write_content.click()
56. write_content.send_keys(u"写入邮件内容写入邮件内容写入邮件内容写入邮件内容写入邮件内容写入邮件内容")
57. time.sleep(5)
58. """存入草稿箱"""
59. browser.switch_to.window(current_windowsname)
60. click_cungao = browser.find_element(By.XPATH, "//span[text()='存草稿']")
61. click_cungao.click()
62. def tearDown(self):
63. self.browser.quit()
64. # if __name__ == "__main__":
65. # unittest.main()
第三部分: 集成所有的test_case,进行运行,并自动产生报告和发送到指定邮箱
test_project目录结构如下:
image.png其中Test_all_case.py就是一个总的脚本
如下:
1. # coding=utf-8
2. __author__ = 'Administrator'
3. import time
4. import unittest
5. import smtplib
6. from email.mime.text import MIMEText
7. from email.header import Header
8. import HTMLTestRunner
9. import os
10. """找到所有的testcase并且加入到suite中"""
11. def find_all_case():
12. file_path = "E:\\study\\JC_autotest\\126_test_auto\\test_case"
13. testsuite_all = unittest.TestSuite()
14. discover_all_testcase = unittest.defaultTestLoader.discover(file_path, pattern="test*.py", top_level_dir=None)
15. for testsuite_small in discover_all_testcase:
16. for testcase in testsuite_small:
17. testsuite_all.addTest(testcase)
18. return testsuite_all
19. """从report中获得最新的一个测试报告"""
20. def find_new_report():
21. report_file_path = "E:\\study\\JC_autotest\\126_test_auto\\report"
22. lists = os.listdir(report_file_path)
23. lists.sort(key=lambda fx: os.path.getctime(report_file_path+"\\"+fx))
24. report_file = lists[-1]
25. new_report_path = os.path.join(report_file_path, report_file)
26. return new_report_path
27. """对应的report到指定的email"""
28. def send_email(receiver_user, receiver_pwd):
29. # 邮件内容
30. email_content = find_new_report()
31. # 邮件主题
32. email_subject = "测试邮件"
33. # 发送者
34. sender = "wy@126.com"
35. # 接收者
36. receiver = receiver_user
37. # 确定使用何种邮箱服务器,此处是126邮箱
38. smtpserver = "smtp.126.com"
39. # 确定授权邮箱登录
40. email_login_name = receiver_user
41. email_login_pwd = receiver_pwd
42. # 将如上内容email_content经过调整,变为邮件可发送内容
43. fp1 = file(email_content, "rb")
44. content = fp1.read()
45. msg = MIMEText(content, _subtype="html", _charset="utf-8")
46. msg["subject"] = Header(email_subject, "utf-8")
47. # 发送邮件
48. smtp = smtplib.SMTP()
49. smtp.connect(smtpserver)
50. smtp.login(email_login_name, email_login_pwd)
51. smtp.sendmail(sender, receiver, msg.as_string())
52. smtp.quit()
53. if __name__ == "__main__":
54. """生成动态时间报告"""
55. now = time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime())
56. report_path = "E:\\study\\JC_autotest\\126_test_auto\\report\\" + now + "report.html"
57. fp = file(report_path, 'wb')
58. runner = HTMLTestRunner.HTMLTestRunner(
59. stream=fp,
60. title=u"126测试报告",
61. description=u"测试报告主要看运行结果"
62. )
63. alltest = find_all_case()
64. runner.run(alltest)
65. fp.close()
66. """找到对应的report并发送邮件到指定的邮件箱"""
67. find_new_report()
68. send_email("wy@126.com", "wy")
运行上面的代码后会自动生产报告:
第四部分,报告
image.png
网友评论