当前位置: 首页 > news >正文

网页设计与网站建设中的热点是什么申请个人网站怎么申请

网页设计与网站建设中的热点是什么,申请个人网站怎么申请,17年哪个网站做h5最好,河南周口东宇网站建设一、前言 前面系列Python3Selenium2自动化系列博文#xff0c;陆陆续续总结了自动化环境最基础环境的搭建、IE和Chrome浏览器驱动配置、selenium下的webdriver模块提供的元素定位和操作鼠标、键盘、警示框、浏览器cookie、多窗口切换等场景的方法、web自动化测试框架、python面…一、前言 前面系列Python3Selenium2自动化系列博文陆陆续续总结了自动化环境最基础环境的搭建、IE和Chrome浏览器驱动配置、selenium下的webdriver模块提供的元素定位和操作鼠标、键盘、警示框、浏览器cookie、多窗口切换等场景的方法、web自动化测试框架、python面向对象和POM设计模型以及python下的单元测试模块unittest模块。 本来计划陆续循序渐进的继续写一些篇章总结python面向对象编程、python下的logging日志模块、os.path路径处理模块、time模块处理时间如格式化时间输出以及一些第三方模块如读取和向excel文件中写入数据的模块xlrd和xlwt写完这些后再开始写本篇的终极目标编写一个轻量级的自动化测试框架。 最终放弃这样做原因楼主发现python面向对象编程、python的这些标准库模块或者第三方模块其实很多博客已经做了很好的总结总之会学习的人百度后总能从一大堆的文章中查看并甄选出对自己解决问题或者思考有帮助和收获的文章如百度python logging模块使用多看博文就一定能找到对自己有帮助的文章。曾经楼主也是在学习实践中遇到很多坑也是根据IDE输出上提示的错误自己先思考解决还是不行就百度一下或者看书并深度学习下这块的内容然后再去解决问题从这些博文以及自己买的python类的书籍中也是受益良多这也是楼主一直以来自己的学习方式。这里每个人都有自己的学习和思考问题的方式找准适合自己的学习方式并执行它完成一个阶段目标然后设置下一个新目标并为之努力。 因此在写这个轻量级的自动化web测试框架前我跳过了上述诸多内容包括且不限于python面向对象编程、python常用标准库loggging、time、os.path运用等等在后面的轻量级框架代码中会有部分注释对于这些python相关的内容学习大家根据自己的情况去充实坚持学习并持之以恒。 在楼主身边有太多类似的人学习总是三天晒鱼、两天打网的完全沉不下心来学习东西浅尝辄止没有积淀如果认定一个东西就去想办法搞定加油楼主也在为自己新的目标fighting中当然目标是广义的可以是生活方面、工作方面、情感方面.......好像跑偏题了O(∩_∩)O这些人生鸡汤似的废话就不说了看看下面这个web自动化测试框架是如何实现的吧~ 二、项目架构说明 该项目架构基于楼主公司的一款B/S软件设计大家也可以根据自己的被测软件来构建适合自己的架构层级当然也可以参考楼主的。做自动化测试项目当搞懂了思想和方法其实都是万变不离其宗就跟写代码一样语言万千种唯一不变的就是语言中殊途同归的思想因此玩会了套路自然就能凌驾于套路之上运用并加入自己的东西。在PyCharm中新建如下的项目层级 有过开发经历的小伙伴都知道有个好的交互式开发工具对于我们创建和管理清晰的项目架构很方便PyCharm就是一款交互良好的python开发工具。楼主上面的项目层级中部分目录和目录下的文件没展开下面显示一个完整的目录结构并说明每个目录是用来干嘛放什么东西 当然这个项目层级设计不是楼主一时间就固定下来的也是在不断的摸索和采坑中不断调整出的一个适合自己的框架目录层级。项目框架设计好了后接下来就是慢慢补充内容一步步实现上面每个目录需要的东西。来吧开始造轮子~ 三、配置文件设计 首先对于上面的config.ini的配置文件进行配置。说到配置文件不管是开发人员还是测试人员都不会陌生还有xml、txt等格式的配置文件配置文件就是用来配置一些参数和固定的变量值一般是程序固定不变的东西我们就放这里面用于程序直接调用如果修改配置文件中变量的值程序调用该变量就会产生不同的输出行为。如在做自动化测试时我们可以将测试的不同浏览器写入到该文件中当我们需要调用firefox浏览器时将参数设置成firefox即可测试脚本将会在火狐浏览器进行。如下图在配置文件中设置了浏览器参数、测试url、邮件服务器、邮件发送和接收者等参数。 至于为什么这个ini配置文件需要编辑成【###】然后下面是参数或者变量的赋值自己百度学习ini配置文件格式看下是怎么编辑的都有哪些要素 四、日志类模块的实现 说到日志大家都明白日志的作用最明显的作用就是在程序的关键位置或者步骤节点下设置日志输出当程序运行时会输出日志日志是我们查看程序运行情况和查找错误的重要手段。因此对于自动化测试也是如此我们需要知道自动化执行的情况以及执行错误的情况发生了什么那就需要给你的自动化测试项目封装一个日志类的功能模块用于输出日志。python语言封装了一个叫logging的标准库模块能够设置日志等级以及怎么输出、输出到哪里。对于logging模块大家可以自己针对性去学习该模块的使用。 我们在上面的项目层级的models目录下创建log.py文件在这个模块文件下定义一个叫做Logger的日志类完成日志类的封装编辑如下代码 Code description封装浏览器引擎类读取配置文件实现浏览器类型的选择并封装打开浏览器和退出的方法Create time2018-11-12Developer# -*- coding: utf-8 -*- import configparser # python解析配置文件模块 import os.path from selenium import webdriver from V2200.test.models.log import Logger # 引入日志类模块logger Logger(loggerBrowserEngine).getlog() # 实例化对象loggerclass BrowserEngine(object):def __init__(self, driver):self.driver driver # 初始化构造函数将参数driver self化便于后面创建的方法直接自动调用def open_browser(self, driver)::param driver: 读取配置文件返回driver:return:config configparser.ConfigParser()file_path os.path.abspath(E:\V2200_AutoTest\V2200\config\config.ini) # 绝对路径写法#print(得到的读取config文件的路径,file_path)config.read(file_path,encodingUTF-8) # 读取配置文件browser config.get(browserType, browserName)logger.info(选择的浏览器是 %s . % browser)url config.get(testServer, URL)logger.info(测试的平台URL是: %s % url)if browser Firefox:driver webdriver.Firefox()logger.info(Starting firefox browser.)elif browser Chrome:driver webdriver.Chrome()logger.info(Starting Chrome browser.)elif browser Ie:driver webdriver.Ie()logger.info(Starting IE browser.)driver.get(url) # 得到测试的urllogger.info(浏览器的版本为%s % driver.capabilities[version]) # 获取浏览器版本driver.maximize_window()logger.info(最大化浏览器窗口.)driver.implicitly_wait(10)return driverdef quit_browser(self):self.driver.quit() 这样我们就自定义封装了一个简单的日志类模块设置了日志输出级别、输出格式以及输出日志的位置后面其他模块需要输出日志时就可以调用引入该日志类。 五、浏览器模块的实现 日志类实现简单封装后继续造轮子~。此部分用于封装浏览器模块主要实现打开和关闭不同浏览器的方法这里就用到了POM的思想咱们封装了浏览器的类型和打开关闭方法那么后面每条测试脚本就可以直接调用打开和关闭浏览器方法脚本只需要专注具体的测试业务逻辑的实现即可。在models目录下新建broser_engine.py文件自定义一个叫做BrowserEngine类实现浏览器模块的封装代码如下 Code description封装浏览器引擎类读取配置文件实现浏览器类型的选择并封装打开浏览器和退出的方法Create time2018-11-12Developer# -*- coding: utf-8 -*- import configparser # python解析配置文件模块 import os.path from selenium import webdriver from V2200.test.models.log import Logger # 引入日志类模块logger Logger(loggerBrowserEngine).getlog() # 实例化对象loggerclass BrowserEngine(object):def __init__(self, driver):self.driver driver # 初始化构造函数将参数driver self化便于后面创建的方法直接自动调用def open_browser(self, driver)::param driver: 读取配置文件返回driver:return:config configparser.ConfigParser()file_path os.path.abspath(E:\V2200_AutoTest\V2200\config\config.ini) # 绝对路径写法#print(得到的读取config文件的路径,file_path)config.read(file_path,encodingUTF-8) # 读取配置文件browser config.get(browserType, browserName)logger.info(选择的浏览器是 %s . % browser)url config.get(testServer, URL)logger.info(测试的平台URL是: %s % url)if browser Firefox:driver webdriver.Firefox()logger.info(Starting firefox browser.)elif browser Chrome:driver webdriver.Chrome()logger.info(Starting Chrome browser.)elif browser Ie:driver webdriver.Ie()logger.info(Starting IE browser.)driver.get(url) # 得到测试的urllogger.info(浏览器的版本为%s % driver.capabilities[version]) # 获取浏览器版本driver.maximize_window()logger.info(最大化浏览器窗口.)driver.implicitly_wait(10)return driverdef quit_browser(self):self.driver.quit() 六、页面基类的实现 此部分用于封装页面基类主要用于封装一些常用的公共方法如截图方法、元素定位方法、元素通用操作方法、警示框处理方法等等只要软件页面一些常用的操作都可以写在该页面基类中这个页面基础类就类似于一个公共函数库一样封装这些方法后面有需要的地方直接调用即可。如下代码已经封装了8大元素定位方法、截图方法、鼠标点击方法、警示框处理方法等后续根据自己的需要自行补充丰富一些常用的功能函数或者方法。这里可以着重看下8大元素定位方法的封装~ Code description页面基类封装所有页面共用的方法Create time2018-11-13Developer# -*- coding: utf-8 -*- import time import os.path from V2200.test.models.log import Logger from selenium.common.exceptions import NoSuchElementException # selenium下封装的判断元素是否存在的模块 logger Logger(loggerBasePage).getlog() class BasePage(object):# 构造方法,初始化参数driver,用于后面的方法直接调用def __init__(self,driver):self.driver driver# 浏览器前进def forward_browser(self):self.driver.forward()logger.info(在当前页面中点击浏览器前进.)# 浏览器后退def back_browser(self):self.driver.back()logger.info(在当前页面中点击浏览器后退.)# 设置隐式等待时间def wait(self,seconds):self.driver.implicitly_wait(seconds)logger.info(设置隐式时间%d 秒. % seconds)# 关闭当前窗口def close_window(self):try:self.driver.close()logger.info(关闭当前窗口.)except NameError as e:logger.error(关闭当前窗口出错抛出错误提示%s. % e)# 截图功能:得到截图并保存图片到项目image目录下def get_window_img(self):file_path os.path.dirname(os.path.abspath(.)) /image/ # 设置存放截图的路径# print(截图保存路径为%s % file_path)timeset time.strftime(%Y%m%d%H%M%S,time.localtime(time.time())) # 格式化时间pic_name file_path timeset .png # 定义截图文件名称try:self.driver.get_screenshot_as_file(pic_name)logger.info(截图成功图片保存路径为/image.)except Exception as e :logger.error(截图出现异常,format(e))self.get_window_img()# 8大页面元素对象定位方法的封装def find_element(self,selector):使用‘’作为字符串分割符后续实际测试用例根据输入的元素selector_by和selector_value 进行选择元素的定位类型:param selector::return: elementelement if not in selector:return self.driver.find_element_by_id(selector)selector_by selector.split()[0] # 按分割符进行切割字符串返回一个列表得到列表的第一个元素即元素的定位方法selector_value selector.split()[1] # 得到列表的第二个元素即元素定位的值if selector_by i or selector_by id:try:element self.driver.find_element_by_id(selector_value)logger.info(定位元素OK实际定位元素方法%s ,定位的元素的属性值%s % (selector_by,selector_value))except NoSuchElementException as e:logger.error(没找到元素抛出异常%s % e)self.get_window_img() # 截取当前窗口elif selector_by n or selector_by name:element self.driver.find_element_by_name(selector_value)elif selector_by c or selector_by class_name:element self.driver.find_element_by_class_name(selector_value)elif selector_by l or selector_by link_text:element self.driver.find_element_by_link_text(selector_value)elif selector_by p or selector_by partial_link_text:element self.driver.find_element_by_partial_link_text(selector_value)elif selector_by t or selector_by tag_name:element self.driver.find_element_by_tag_name(selector_value)elif selector_by x or selector_by xpath:try:element self.driver.find_element_by_xpath(selector_value)logger.info(定位元素OK实际定位元素方法%s ,定位的元素的属性值%s % (selector_by, selector_value))except NoSuchElementException as e:logger.error(没找到元素抛出异常%s % e)self.get_window_img() # 截取当前窗口elif selector_by c or selector_by css_selector:element self.driver.find_element_by_css_selector(selector_value)else:raise NameError(请输入正确的目标元素类型.)return element # 返回变量element# 封装输入框方法def type(self,selector,text):el self.find_element(selector)el.clear()try:el.send_keys(text)logger.info(输入的文本内容为%s % text)except NameError as e:logger.error(输入的内容异常抛出异常%s % e)self.get_window_img()# 清除文本内容def clear(self,selector):el self.find_element(selector)try:el.clear()logger.info(清除输入框文本信息OK)except NameError as e:logger.error(清除输入框内容失败抛出异常: %s % e)self.get_window_img()# 封装点击元素的动作def click(self,selector):el self.find_element(selector)try:el.click()logger.info(点击元素动作完成)except NameError as e:logger.error(点击事件失败抛出异常%s % e)# 获取打开的url地址标题def get_page_title(self):logger.info(当前打开的url地址标题为%s % self.driver.title)return self.driver.title# 获取警示框并得到提示框信息和关闭提示框def get_alert(self):el self.driver.switch_to.alert # 获取窗口弹窗的方法try:assert 用户名或者密码错误 in el.text # el.text方法获取提示框内容logger.info(弹窗提示正确)el.accept() # 点击弹窗确认按钮except Exception as e:print(弹窗提示错误, format(e))staticmethod # 静态方法不强制要求传递参数类可以不用实例化就能调用该方法def sleep(seconds):time.sleep(seconds)logger.info(等待时间是%s 秒 % seconds) 七、登陆页面元素的封装 在上面我们实现了页面基类的封装下图为楼主公司的一个软件登陆页面在page_obj目录下新建home_page.py实现这个登陆页面元素定位和元素操作方法的封装 代码如下 Code description 继承基类封装登陆页面所有的元素和元素的操作方法Create time2018-11-16Developer# -*- coding: utf-8 -*- from V2200.test.models.base_page import BasePage import xlrd # excel操作相关的模块 from V2200.test.models.log import Logger excelfile_path E:\V2200_AutoTest\V2200\data\\testdata\elementData.xlsx workbook xlrd.open_workbook(excelfile_path) table_sheetName workbook.sheet_by_name(登陆页面业务组件) logger Logger(loggerHomePage).getlog() class HomePage(BasePage):def __init__(self,driver):BasePage.__init__(self,driver) # 继承父类并调用父类的初始化方法self.input_username table_sheetName.cell(1,1).value # 读取excel表中用户名输入框元素self.input_password table_sheetName.cell(2,1).value # 读取excel表中密码输入元素self.rempwd table_sheetName.cell(3,1).value # 读取excel表中是否记住密码按钮元素self.loginBtn table_sheetName.cell(4,1).value # 读取excel表中登陆按钮元素self.centerBtn table_sheetName.cell(6,1).value # 读取excel表中切换到中心用户的按钮logger.info(读取excel文件中登陆页面相关元素数据完成)def center_user(self):self.click(self.centerBtn)def user(self,text):self.type(self.input_username,text)def pwd(self,text):self.type(self.input_password,text)def ifrempwd(self):self.click(self.rempwd)def login(self):self.click(self.loginBtn) 这里引入了第三方的xlrd模块用于读取excel文件中的数据当然还有xlwt模块用于向excel写数据说白了这两个模块就是实现操作excel上面代码只用到了xlrd模块在编写上面登陆页面的封装前咱们先将登陆页面定位的元素和元素属性写到对应的excel表中这样做的好处就是实现测试数据和测试脚本的分离如果页面元素发生变化那么我们就只需要修改excel中的元素属性而不需要修改代码在data/testdata目录下新建名称为elementData.xlsx的文件excel编辑内容如下 后续各个页面的元素都是定位以及元素的数据都是可以写在不同的sheet中至于xlrd模块具体向excel中读数据的方法以及使用这里也是不做介绍自己百度学习练习下就知道了。 软件其他页面的封装也是类似按照上面的思想来就OK了。 八、登陆页面测试脚本的编写 通过上面封装的基类和登陆页面类在unittest框架下开始编写具体的测试脚本。测试脚本在testcase下如登陆功能的脚本我们写在testcase/login_page_case目录下其他页面的脚本写在对应的目录下。在testcase/login_page_case目录下创建test_login_success.py和test_login_unsuccess.py分别表示登陆成功的脚本和登陆不成功的脚本。如下代码 登陆成功代码 Code description测试登陆 Create time2018-11-20 Developer# -*- coding: utf-8 -*- import unittest # unittest执行测试用例默认是根据ASCII码的顺序加载测试用例数字与字母的顺序为0-9A-Za-z。 import time from V2200.test.models.browser_engine import BrowserEngine from V2200.test.page_obj.home_page import HomePage import xlrd excelfile_path E:\V2200_AutoTest\V2200\data\\testdata\elementData.xlsx workbook xlrd.open_workbook(excelfile_path) table_sheetName workbook.sheet_by_name(登陆页面业务组件) class Login(unittest.TestCase):classmethoddef setUpClass(cls):# 测试前置条件browser BrowserEngine(cls)cls.driver browser.open_browser(cls)classmethoddef tearDownClass(cls):# 测试结束后环境的复原cls.driver.quit() # case1:正确的用户密码登陆def test_1_login_sucess(self):homepage HomePage(self.driver)homepage.user(table_sheetName.cell(1,2).value) # 读取excel中的数据homepage.pwd(table_sheetName.cell(2,2).value)homepage.ifrempwd()homepage.login()time.sleep(2)try:assert 视频监控 in homepage.get_page_title()print(test title success)homepage.get_window_img() # 调用Basepage类封装的截图方法except Exception as e:print(test title error, format(e))if __name__ __main__:unittest.main() # 将一个单元测试模块变成可以直接运行的测试脚本 登陆不成功代码 Code description测试登陆 Create time2018-11-20 Developer# -*- coding: utf-8 -*- import unittest # unittest执行测试用例默认是根据ASCII码的顺序加载测试用例数字与字母的顺序为0-9A-Za-z。 import time from V2200.test.models.browser_engine import BrowserEngine from V2200.test.page_obj.home_page import HomePage import xlrd # from V2200.test.page_obj.link_page import LinkPage excelfile_path E:\V2200_AutoTest\V2200\data\\testdata\elementData.xlsx workbook xlrd.open_workbook(excelfile_path) table_sheetName workbook.sheet_by_name(登陆页面业务组件) class LoginUnsuccess(unittest.TestCase):classmethoddef setUpClass(cls):# 测试前置条件browser BrowserEngine(cls)cls.driver browser.open_browser(cls)classmethoddef tearDownClass(cls):# 测试结束后环境的复原cls.driver.quit() # case2:错误的用户正确的密码登陆def test_2_login_erroruser(self):homepage HomePage(self.driver)homepage.user(table_sheetName.cell(1, 3).value) # 读取excel中的数据homepage.pwd(table_sheetName.cell(2, 3).value)homepage.ifrempwd()homepage.login()time.sleep(2)try:assert 视频监控 in homepage.get_page_title()print(test title success)homepage.get_window_img() # 调用Basepage类封装的截图方法except Exception as e:print(test title error,format(e))# case3:正确的用户错误的密码登陆def test_3_login_errorpasswd(self):homepage HomePage(self.driver)homepage.user(table_sheetName.cell(1, 4).value) # 读取excel中的数据homepage.pwd(table_sheetName.cell(2, 4).value)homepage.ifrempwd()homepage.login()time.sleep(2)try:assert 视频监控 in homepage.get_page_title()print(test title success)homepage.get_window_img() # 调用Basepage类封装的截图方法except Exception as e:print(test title error, format(e)) # case4:错误的用户错误的密码登陆def test_4_login_erroruser_errorpasswd(self):homepage HomePage(self.driver)homepage.user(table_sheetName.cell(1, 5).value) # 读取excel中的数据homepage.pwd(table_sheetName.cell(2, 5).value)homepage.ifrempwd()homepage.login()time.sleep(2)try:assert 视频监控 in homepage.get_page_title()print(test title success)homepage.get_window_img() # 调用Basepage类封装的截图方法except Exception as e:print(test title error, format(e))if __name__ __main__:unittest.main() # 将一个单元测试模块变成可以直接运行的测试脚本 九、测试执行控制模块 完成上面的测试脚本编写后对于自动化测试还需要有一个测试执行控制的部分用来控制执行哪些用例集生成HTML可视化的测试报告并实现测试报告邮件发送。 在runtest目录下新建run_all_case.py编辑如下代码 Code description TestLoader测试case,并执行得到的所有测试集生成html文件的测试报告并邮件发送测试报告Create time2018-11-20Developer# -*- coding: utf-8 -*- import HTMLTestRunner1 # 导入开源的测试报告生成HTML格式的模块 import os.path import time import unittest import configparser # 解析配置文件模块 from email.mime.text import MIMEText from email.header import Header import smtplib发邮件需要用到python两个模块smtplib和email这俩模块是python自带的只需import即可使用。 smtplib模块主要负责发送邮件email模块主要负责构造邮件。 其中MIMEText()定义邮件正文Header()定义邮件标题。MIMEMulipart模块构造带附件 # 定义邮件发送 def send_mail(file_new):config configparser.ConfigParser()file_path os.path.dirname(os.path.abspath(.)) /V2200/config/config.iniconfig.read(file_path, encodingUTF-8) # 读取config配置文件emailserver config.get(emailserver, emailservice)from_user config.get(emailfrom_user, from_user)from_passwd config.get(emailfrom_passwd, from_passwd)to_user config.get(emailto, to_user)f open(file_new,rb)mail_boy f.read()f.close()msg MIMEText(mail_boy,html,utf-8) # 定义邮件正文msg[Subject] Header(V2200自动化测试报告,utf-8) # 定义邮件标题smtp smtplib.SMTP()smtp.connect(emailserver) # 连接邮箱服务器smtp.login(from_user,from_passwd) # 邮件发送方登陆smtp.sendmail(from_user,to_user,msg.as_string()) # 邮件发送者和接收者smtp.quit()print(邮件已经发送请注意查收)# 找到最新生成的测试报告文件 def new_report(report_path):lists os.listdir(report_path) # 得到项目目录下所有的文件和文件夹lists.sort(keylambda fn:os.path.getmtime(report_path \\ fn)) # 将得到的文件和文件夹按创建时间排序file_new os.path.join(report_path,lists[-1]) # 获取最新创建的文件print(file_new)return file_new # 测试用例路径 # case_path os.path.join(os.getcwd(),testcase) case_path os.path.abspath(E:\V2200_AutoTest\\testcase) print(case_path) # 测试报告路径 report_path os.path.abspath(E:\V2200_AutoTest\\testreport) print(report_path) def all_case():找到case_path路径下所有以test_login开头的测试用例文件,保证每个子目录都是一个包文件即该目录下有__init__.py文件才能获取到多个目录下的所有test*.py的文件下的所有测试用例all_case unittest.defaultTestLoader.discover(case_path,patterntest_login*.py,top_level_dirNone)print(all_case)return all_case if __name__ __main__:# 获取当前时间并格式化时间now_time time.strftime(%Y-%m-%d-%H_%M_%S,time.localtime(time.time()))# html测试报告路径report_html os.path.join(report_path,result_now_time.html)fp open(report_html,wb) # 打开一个文件将测试结果写入该文件中wb:以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件并从开头开始编辑即原有内容会被删除。如果该文件不存在创建新文件runner HTMLTestRunner1.HTMLTestRunner(streamfp,titleuV2200自动化测试报告测试结果如下,descriptionu用例执行情况)runner.run(all_case()) # 执行所有测试casefp.close()mail_report new_report(report_path)send_mail(mail_report) 该代码编写了怎么获取需要执行的测试用例脚本和引入生成可视化测试报告的模块和发送邮件模块等对于这几个模块自己多学习下就能掌握。 十、测试执行效果 通过上面这些类的封装以及测试脚本的编写算是完成了我们自动化测试框架的基本具备的东西。忙活了这么久是时候来看看咱们的效果了。PyCharm中运行run_all_case.py运行完成后的效果如下 咱们再看看log/logs路径下生成的日志就如下图这样 同时执行完成后在testreport目录下会生成HTML格式的可视化测试报告文件用浏览器打开效果如下 这报告是不是很酷炫啊O(∩_∩)O哈哈~ 还有测试报告发送邮件给到指定的邮箱哦如果你的自动化测试执行完了可以把该自动化测试报告自动邮件发给你的leader领导看到了是不是对你另眼相看楼主上面的代码设置发送的是楼主公司内网使用的邮箱foxmail效果如下 到这里算是完成了咱们自动化测试框架并取得了一定的成果~~ 十一、整个自动化测试框架的总结和反思 其实到第十节的介绍楼主算是成功的做出了一个轻量级的测试框架but回过头来继续思考还是有诸多需要优化和待下一步解决的问题 1.页面基类还需要补充更多的公共函数或者方法 2.可视化HTML测试报告内容还不够丰富没有完善的测试执行失败的用例的详细描述和测试截图附件显示 3.整个框架的部分逻辑还需要优化和改进 4.待解决的问题没实现测试脚本的持续集成和定时执行现在想到的是配合jenkins持续集成来达到自动构建测试执行任务 5.想独立开发一个web测试平台现在想到的是学习Django的web框架来开发一个自动化测试平台 对于这样不足和构想楼主也是会继续学习相关的知识并一步步实现它对于看到该博客的朋友们也可以给楼主一些好的建议和指出错误希望有对自动化测试有兴趣的朋友大家共同学习和进步哦。 感谢您的阅读若有不足之处欢迎指教共同学习、共同进步。 如您喜欢麻烦推荐一下如您有新想法欢迎提出。 写在最后 这篇贴子到这里就结束了最后希望看这篇帖子的朋友能够有所收获。 都到这了记得三连支持一下吧。 完整版文档下载方式 这些资料对于从事【软件测试】等相关工作的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴我走过了最艰难的路程希望也能帮助到你以上均可以分享。 在评论区和我互动交流或者私❤我【软件测试学习】领取即可拿走不谢。
http://www.dnsts.com.cn/news/35715.html

相关文章:

  • 做的好看的pc端网站网页设计版权信息代码
  • seo怎么做网站排名建设网银怎么提高转账限额
  • 免费模版网站福州 网站建设
  • 南昌网站建设大全文字域名可以做网站
  • 网站开发需要哪些文档小视频网站源码
  • 自己做外贸网站wordpress打开速度慢 插件
  • 网站建设购买数据库的流程图wordpress 打赏不能用
  • 温州网站建设网络广州市民网页官网
  • 做团餐 承包食堂的企业网站如何注册公司网站免费注册
  • 电信做网站吗江苏城乡建设
  • 做照片视频的网站做网站要准备
  • 单页网站如何制作重庆有几个区几个县
  • 做的网站在百度上搜不出来网站哪个公司做的好
  • 企业门户网站建设思路做木质的网站
  • 我的班级网站模板微信小程序源码网
  • 代码库网站建设网站方案
  • 网站建设技术网重庆万州网站建设
  • 网站开发公司杭州网站建设商城网站建设论文
  • 公司最近想做个网站怎么办机关单位网站建设合同
  • 有没有网站专门做cnc招聘短网址生成 在线生成
  • 部队门户网站建设方案龙华做网站的
  • 怎么做直播室的网站网站建设流程详细
  • 天津网站开发建设报名系统网站
  • 网站开发平面设计师岗位要求sogo提交网站入口
  • 新建网站费用在线制作表白网页浪漫
  • 公司网站备案流程18芯城网站开发案例
  • 长春企业网站seo怎么搭建免费网站
  • 长春建站模板源码ftp网站上传 方法
  • 网站怎么做图片动态图片不显示哈尔滨小程序开发
  • 南漳网站建设土木工程毕设代做网站