1总体需求1.1实现目标基于BS架构,模拟用户(鼠标、键盘)操作,实现测试用例的快速重复执行;易于回归测试,快速覆盖主线用例或功能;在线或离线巡测,结合持续集成,及时发现运行环境问题;提升个人自动化测试技术能力,为企业提供强大的测试手段。1.2功能需求基于Unittest,对所有测试用例进行封装、调用和组织,进行批量或指定用例操作;支持邮件服务,可添加任意团队成员邮箱,并及时通知团队成员自动化操作结果;支持log日志,保存所有正在运行的进程或者需要记录的数据;支持HTML测试报告,直观展示测试结果和数据;支持用例设计和测试结果分离,方便数据管理;支持Json、conf、excel等配置文件读取,提供灵活的配置文件操作方式;支持用户登录封装,后续所有用例登录共用一个公共方法;支持任意修改HTMLTestRuner,可自定义测试报告模板;支持多语言测试报告(英文和中文);支持截图功能;支持Jenkins持续集成。1.3其他要求适用于所有bs架构自动化测试;模块化设计,以项目框架的形式组织代码;公共方法封装,统一调用;数据与结果分离,一目了然;支持邮件自定义;代码注释清晰。1.4适用人员具有一定测试基础的软件测试人员;有一定的代码(Python/Java)基础;所有致力于学习WebUI自动化测试的人员。1.5学习周期为两周到一个月,可实现独立的webUI自动化测试;1.6学习建议建议按照文章顺序,循序渐进地学习和实践;文章是从基础环境到最终框架的一个过程。相对来说,比较详细;文章偏向项目实战,没有过多的理论介绍和术语解释,所以对于0基础的人员来说,可能需要额外的时间来补充知识。2详细设计2.1需求分析对实现需求进行详细分析,主要如下:功能描述使用Unittest框架的开源自动化测试框架,直接使用批量或指定用例运行Unittest框架来支持这个功能。Log日志可以使用Python的logging库生成HTML测试报告使用HtmlTestRunner.py模块实现此功能用例设计和结果分离使用excel、json等配置文件组织用例数据支持Json、conf,excel等配置文件读取这里首先使用excel驱动页面元素Userlogin封装直接将登录功能模块化,使用Unittest框架中的setup和teardown自定义测试报告模板。使用HTMLTestRuner.py模块报告多种语言。将HTMLTestRuner.py模块用于屏幕截图功能。使用Selenium2.2技术栈的save_screenshot方法技术版本及说明PythonV3.x(本文为3.7)===编程语言支持SeleniumV3.141.0===UI元素、控件识别、定位、浏览器控件等HtmlTestRunnerPython3版本===生成Html测试报告LoggingPython自带===生成日志LogXlrdV1.2.0===excel读取方法UnittestPython自带===自动化测试框架SmtplibPython自带===邮件服务emailPython自带===邮件serviceosPython自带===系统模块PyCharmCommunity2020.2中文版操作系统Windows10旗舰版64位其他后续补充3框架设计3.1框架描述3.2框架执行过程4预期结果4.1测试过程日志4.2测试报告HTML格式4.3测试ReportEmailFormat5特别是代码基本完成。如果大家有好的建议,可以交流学习心得。6第一个WebUI自动化测试程序在开始构建自动化框架之前,先写一个简单的自动化测试脚本,感受下什么是WebUI自动化测试,以及元素的基本操作,为后续框架搭建识别基础。6.1Selenium基础理论6.1.1Selenium安装直接打开cmd窗口,输入以下命令进行在线安装:pip3installselenium安装完成后,在cmd窗口中输入以下命令,可以看到selenium已经安装好了piplist6。1.2WebDriverAPIselenium提供了很多WebDriverAPI可以用来:识别元素,点击定位元素,双击拖动滚动条,浏览器控件如窗口大小,前进后退,刷新,表单切换,多窗口切换,文件双传下载、cookie操作、验证码等详情请参考以下:SeleniumWebDriverAPI学习笔记(一):元素定位SeleniumWebDriverAPI学习笔记(二):浏览器控件SeleniumWebDriverAPI学习笔记(三)):浏览器控件6.2浏览器驱动安装要求如果要使用selenium操作浏览器上的元素,必须安装浏览器驱动;这应该根据具体的浏览器版本来定义;本文使用Chrome浏览器,版本为88.0.4324.182(官方版)(32位);6.2.1Chromedriver下载下载地址:Chrome浏览器各版本对应的驱动6.2.2Chromedriver安装下载后是一个chromedriver.exe,如果是w7系统,需要把chromedriver.exe放在安装目录下chrome浏览器的,然后在系统环境变量中添加chrome浏览器的安装目录;如果是w10系统,需要把chromedriver.exe放在Python安装目录下,如本文:6.3代码设计思路6.3.1打开新pycharm脚本前创建的项目[Automated-UITest-demo],右键单击该项目并创建一个新的python文件。在这里,创建了一个名为test_baidu的新python文件。创建完成后,添加一个test_baidu的py文件,如下。6.3.2自动化需求这里我们做如下UI自动化测试:1、自动打开chrome浏览器2、输入百度网址3、打开百度首页,输入helloworld4、最大化浏览器窗口5、搜索helloworld。然后回车6.将浏览器窗口缩小到640*4807,先回到浏览器,再次输入csdn进行搜索8.清除输入内容9.判断是否进入csdn官网6.3.3需求分析需求分析自动打开chrome浏览器需要用到webdriver.Chrome()输入百度网址用driver.get()方法打开百度首页,输入helloworld用send_keys()最大化浏览的方法使用maximize_window()方法在浏览器窗口中搜索helloworld。使用send_keys()方法将浏览器窗口的大小缩小到640*480,然后回车。使用set_window_size()方法让浏览器返回back()方法清除输入内容。driver.current_url方法用于确定当前URL。以上方法是具体使用的。参考[1.2WebDriverAPI]6.3.4元素定位上面的需求已经说清楚了,接下来就是进行元素定位了。到这里,需求大概可以拆解了。需要哪些元素?元素说明定位方式百度输入框输入helooworldfind_element_by_id搜索csdn点击csdn官网模拟点击进入csdn官网find_element_by_xpath如何定位元素,知道使用哪种定位方式?A、我们打开百度首页,然后按【F12】打开浏览器的调试模式B、点击调试模式窗口左上角的小三角C、将鼠标移动到百度搜索输入框D.点击它,然后看到搜索输入框的元素属性,即要使用的元素定位方式6.4代码实现6.4.1包/模块介绍打开新建的test_baidu.py文件,输入以下内容:fromseleniumimportwebdriver#从selenium.webdriver导入selenium模块的webdriver。common.keysimportKeys#键盘输入,所以使用Keysimporttime#元素等待时间,所以导入时间module6.4.2OpenBaidudriver=webdriver.Chrome()#OpenChromebrowserdriver.get("http://www.baidu.com")#输入百度网址print("=============验证浏览器的基本控制===================================================================================================================================位置搜索框输入helloworldd、最大化窗口defsearch():print("1,searchforhelloworld.andpressEnter......")time.sleep(2)driver.find_element_by_id("kw").send_keys("helloworld")#Input"helloworld"time.sleep(2)driver.find_element_by_id("kw").send_keys(Keys.ENTER)#输入搜索time.sleep(2)driver.maximize_window()#最大化当前窗口6.4.4窗口缩小为640*480defwindows_size():print("2,浏览器窗口大小缩小为640*480...")time.sleep(2)driver.set_window_size(640,480)#控制浏览器显示尺寸为640*480time.sleep(0.5)driver.maximize_window()#最大化当前窗口time.sleep(2)6.4.5窗口刷新efback_refresh():print("3.先返回浏览器,再输入csdn搜索")driver.back()driver.find_element_by_id("kw").send_keys("csdn")#输入csdntime.sleep(1)driver.refresh()#刷新6.4.6清除输入内容defserach_clear():print("4.清除输入的内容...")driver.find_element_by_id("kw").send_keys("csdn")#输入csdntime.sleep(2)驱动.find_element_by_id("kw").clear()time.sleep(0.5)6.4.7进入csdn官网判断defcsdn():print("5,进入csdn官网")driver.find_element_by_id("kw").send_keys("csdn")#输入csdntime.sleep(2)driver.find_element_by_id("kw").send_keys(Keys.ENTER)#输入搜索time.sleep(2)driver.find_element_by_xpath("//*[@@id='1']/h3/a[1]").click()time.sleep(2)windows=driver.window_handlesdriver.switch_to.window(windows[-1])now_url=driver.current_urlm_ge??t_url="https://www.csdn.net/"ifnow_url==m_ge??t_url:print("经判断,已进入csdn官网!!")else:print("未进入csdn官网,请检查代码!”)6.4。8调用方法search()windows_size()back_refresh()serach_clear()csdn()driver.quit()#关闭浏览器6.5完整源码#作者:Administrator#日期:2021/2/2415:15#文件名:test_baidu.py#功能:打开百度首页,在搜索栏输入“helloworld”fromseleniumimportwebdriverfromselenium.webdriver.common.keysimportKeysimporttimedriver=webdriver.Chrome()#打开Chrome浏览器driver.get("http://www.baidu.com")#输入百度网址print("=============验证浏览驱动的基本控制==========")defsearch():print("1,searchforhelloworld.andpressEnter...")time.sleep(2)driver.find_element_by_id("kw").send_keys("helloworld")#输入“helloworld”time.sleep(2)driver.find_element_by_id("kw").send_keys(Keys.ENTER)#输入搜索time.sleep(2)driver.maximize_window()#最大化当前窗口defwindows_size():print("2,浏览器窗口大小缩小为640*480...")time.sleep(2)driver.set_window_size(640,480)#控制浏览器显示尺寸为640*480time.sleep(0.5)driver.maximize_window()#最大化当前窗口time.sleep(2)defback_refresh():print("3.先备份浏览器,进入csdn再次搜索")driver.back()driver.find_element_by_id("kw").send_keys("csdn")#输入csdntime.sleep(1)driver.refresh()#刷新defserach_clear():print("4,清除输入...")driver.find_element_by_id("kw").send_keys("csdn")#输入csdntime.sleep(2)driver.find_element_by_id("kw").clear()time.sleep(0.5)defcsdn():print("5.进入csdn官网")driver.find_element_by_id("kw").send_keys("csdn")#输入csdntime.sleep(2)driver.find_element_by_id("kw").send_keys(Keys.ENTER)#回车到继续搜索time.sleep(2)driver.find_element_by_xpath("//*[@id='1']/h3/a[1]").click()time.sleep(2)windows=driver.window_handlesdriver.switch_to.window(windows[-1])now_url=driver.current_urlm_ge??t_url="https://www.csdn.net/"ifnow_url==m_ge??t_url:print("经判断,已进入csdn官网!!")else:print("我没有进入csdn官网,请检查代码!")search()windows_size()back_refresh()serach_clear()csdn()driver.quit()#关闭浏览器
