• 多测师讲解 ---面试课程之python自动化测试讲解(203) ----高级讲师肖sir


    案例1:结合python+seleuim线性脚本

    ui自动化 我最开始接触自动化使用rf框架做的,但是工具的局限很大。所以我目前做ui自动化基本都是用的python加selenium库。 先导入webdriver和time库中sleep模块。 我做自动化都是用的chrome浏览器,先用webdriver.chrome()调用驱动,赋给一个变量browser,然后用get方法打开项目首页,在最大化浏览器maximize_window,防止有些元素加载不完全或者点击不到。然后我会用一个implicitly_wait隐式等待方法,因为网速追不上程序的运行速度。如果是页面不跳转在页面加载元素的话,我会选择再用个sleep方法强制等待2S左右,因为不跳转的时候implictly wait不会生效,如果需要定位这些元素就会定位不到。 进入后先登录,通过link_text定位登录这个链接元素,用click点击,然后定位用户名输入框和密码输入框,用send_keys传入账户名和密码,然后用xpath定位确认登录按钮用click点击,登录就完成了。这个时候回跳转至首页。 项目首页就有投资模块的入口,用find_element_bylinktext找到元素然后用click点击,这个时候页面会跳转,跳转完是进入标的搜索页面,选择标的类型:正常的标投资或者债权转让,标的时间,我们项目是1月,2月,12个月,标的类型是用click就可以点击实现了,时间选择我们是个下拉框,需要先导入select模块,然后先select接这个元素,然后用select by index方法,选择1个对应的值。这里说明下我为什么用index,因为有时候会换中英文,或者value值,会导致脚本失败,而index就可以避免这种情况了。选择完这两个后等待元素的加载,这里也是用sleep,选择某一个标的投资按钮,也是用xpath定位然后click点击,这个时候页面新开一个确认投资窗口,这个时候就涉及到页面的切换,这里涉及到一个利用句柄handle切换窗口,先使用browser.window_handles获取所有句柄,索引位-1就是最新的窗口的,用switch_to_window()接新窗口的句柄就可以切换窗口了。然后用send_keys传入投资金额,支付密码,然后验证码是让开发同事写成了固定的字符,短信验证码关闭了。然后点击确认投资换这个button,也是用xptah定位,click点击。这个时候页面会跳转显示投资成功,这里我会用投资完成这个文本来做断言,用的是if  not 加上assert  false做的。然后就关闭浏览器用quit。然后前台的操作就完成了,再进入数据库校验数据,这里需要导入mysqldb模块,然后用connect连接项目的数据库,用cursor获取游标,(游标就是一个数据的缓存区,用execute方法就可以吧sql语句取出来的临时表放入游标中,fetchall就可以把游标内的数据都是放在toupl容器中,通过索引位就可以把真实数据取出来做断言了)用execute接sql语句来获取对应的投资者在此项目的投资金额,在用fetchall取出此数据,断言这个数据是否等于我们在前台输入的投资金额。然后就断开数据库链接,关闭浏览器。这就是我的大概流程了。

    案例2:结合unittest框架讲解

    我说一下我之前做自动化的项目吧,我之前做的项目叫做三农金服,是一家web 端的金融p2p平台。其中自动化覆盖率还是比较高的,主要是用
    Python结合selenium进行自动化测试的,整个用例框架的设计用的是Unittest框架,它能帮我们比较规范的、系统的管理和执行用例,也便于后续的维护。
    在写自动化用例的时候我喜欢对用例进行分层处理。我一般会设置六个模块:公共模块、用例模块、执行模块、报告模块、数据模块、页面元素模块。
    把一些公共的,经常调用的属性放到公共模块中,比如登录登出啊,连接断开数据库等。
    页面元素模块就是将页面定位和业务操作分开,分离测试对象(元素对象)和测试脚本(用例脚本),这样的话当页面元素变动的话我们只需要更改页面元素对象即可。
    把用例的具体内容放到用例模块中,比如我要借款,通过设置一些类,再把我要借款相应的用例放到这下面,这样后续我进行维护就非常的直观方便。
    执行模块就是对上面各个类的执行方法,要执行哪些类里的哪些用例和对应测试报告的生成。
    报告模块就是存放生成测试报告的地方,这样我们就能一目了然的看到是哪些模块下的用例的执行情况。  
    数据模块的是就是存放一些数据的地方,比方说用户的账户密码,网址信息等。
    就拿我要出借这个流程的举个例子讲解一下吧!首先导入相应的库 from selenium import webdriver ,import unittest。然后新建一个继承unittest.testcase类。然后在def setup里写一些前置条件:像是webdrvier.chrome()选择谷歌浏览器,用get方式?获取网址打开,用maximize.window进行浏览器最大化处理,避免出现页面中元素定位后无?法点击报错的现象,确保用例执行的准确性,因为有时候用例执行太快,而网页加载太慢会?导致报错,所以我一般都会用implicity_wait进行智能等待,确保页面加载完成。把登入写进了公共模块中直接调用他。
    接下来定位我要出借,因为他是一个下拉列表,所以我们得先导入from selenium.webdriver.support.ui import Select模块,用 Select(dr.find_element_by_xpath(“   ”).select_by_index(1),通过索引位进行定位。这个时候会打开一个新页面,所以我们得定位到这个新页面。
    首先我们先获取所以页面的句柄allhead=dr.window_handles,再用dr.switch_to_window(allhead[-1])定位到我要出借这个新页面,通过find_element_by_xpath定位对应的标,然后定位到投资金额框,至于输入金额的话为了提高效率,我是之前已经写好了随机生成整百金额的函数,所以我这边直接调用就可以了,至于验证码我之前就已经请开发帮我去掉了,然后定位确认投资按钮点击。接下来系统会弹出一个风险提示
    揭示书,它是一个alter弹框,alter=driver.switch_to_alter()进入到alter弹框里,再用alter.accept()。
    这时候为了保证用例执行的准确性,?再用unittest框架中的断言,之后用if语句和assertEquals判断前后两个值是否相符如:(出借成功,出借失败),不相符的话用dr.get_screenshot_as_file("d:\yy\erorr1.png"),最后到执行和生成报告了,用unittest中的testloader方法。
    定义一个变量接收测试用例的目录,discover=unittest.defaultTestLoader.discover(测试用例的目录,“text*.py”)加载该目录下所有以text开头。

    的Py文件。
    导入生成报告所需的HTMLTestRunnerCN模块,用with open打开对应的报告文件,“wb”二进制方式写入,用HTMLTestRunnerCN里的runner方法生成测试报告。最后用runnrt.run(discover)方法执行之前加 载的用例就好了。
    这就是之前公司用python加selenium做自动化测试的一个基本流程。

     2,2案例:

    我说一下我之前做自动化的项目吧,我之前做的项目叫做xxxx,是一家web 端的金融p2p平台。其中自动化覆盖率还是比较高的,主要是用
    Python结合selenium进行自动化测试的,整个用例框架的设计用的是Unittest框架,它能帮我们比较规范的、系统的管理和执行用例,也便于后续的维护。
    在写自动化用例的时候我喜欢对用例进行分层处理。我一般会设置六个模块:公共模块、用例模块、执行模块、报告模块、数据模块、页面元素模块。
    把一些公共的,经常调用的属性放到公共模块中,比如登录登出啊,连接断开数据库等。
    页面元素模块就是将页面定位和业务操作分开,分离测试对象(元素对象)和测试脚本(用例脚本),这样的话当页面元素变动的话我们只需要更改页面元素对象即可。
    把用例的具体内容放到用例模块中,比如我要借款,通过设置一些类,再把我要借款相应的用例放到这下面,这样后续我进行维护就非常的直观方便。
    执行模块就是对上面各个类的执行方法,要执行哪些类里的哪些用例和对应测试报告的生成。
    报告模块就是存放生成测试报告的地方,这样我们就能一目了然的看到是哪些模块下的用例的执行情况。  
    数据模块的是就是存放一些数据的地方,比方说用户的账户密码,网址信息等。
    就拿我要出借这个流程的举个例子讲解一下吧!首先导入相应的库 from selenium import webdriver ,import unittest。然后新建一个继承unittest.testcase类。然后在def setup里写一些前置条件:像是webdrvier.chrome()选择谷歌浏览器,用get方式?获取网址打开,用maximize.window进行浏览器最大化处理,避免出现页面中元素定位后无?法点击报错的现象,确保用例执行的准确性,因为有时候用例执行太快,而网页加载太慢会?导致报错,所以我一般都会用implicity_wait进行智能等待,确保页面加载完成。把登入写进了公共模块中直接调用他。
    接下来定位我要出借,因为他是一个下拉列表,所以我们得先导入from selenium.webdriver.support.ui import Select模块,用 Select(dr.find_element_by_xpath(“   ”).select_by_index(1),通过索引位进行定位。这个时候会打开一个新页面,所以我们得定位到这个新页面。
    首先我们先获取所以页面的句柄allhead=dr.window_handles,再用dr.switch_to_window(allhead[-1])定位到我要出借这个新页面,通过find_element_by_xpath定位对应的标,然后定位到投资金额框,至于输入金额的话为了提高效率,我是之前已经写好了随机生成整百金额的函数,所以我这边直接调用就可以了,至于验证码我之前就已经请开发帮我去掉了,然后定位确认投资按钮点击。接下来系统会弹出一个风险提示
    揭示书,它是一个alter弹框,alter=driver.switch_to_alter()进入到alter弹框里,再用alter.accept()。
    这时候为了保证用例执行的准确性,?再用unittest框架中的断言,之后用if语句和assertEquals判断前后两个值是否相符如:(出借成功,出借失败),不相符的话用dr.get_screenshot_as_file("d:\yy\erorr1.png"),最后到执行和生成报告了,用unittest中的testloader方法。
    定义一个变量接收测试用例的目录,discover=unittest.defaultTestLoader.discover(测试用例的目录,“text*.py”)加载该目录下所有以text开头。
    
    的Py文件。
    导入生成报告所需的HTMLTestRunnerCN模块,用with open打开对应的报告文件,“wb”二进制方式写入,用HTMLTestRunnerCN里的runner方法生成测试报告。最后用runnrt.run(discover)方法执行之前加 载的用例就好了。
    这就是之前公司用python加selenium做自动化测试的一个基本流程。
    

     

    案例:

    python+selenium方式一:

    我说一下做自动化的过程,我之前做自动化的是一个叫琥珀金服的项目。我之前项目对自动化的覆盖率比较高,主要是用Python结合selenium进行自动化测试的。
              我一般的话比 较喜欢用unittest框架来实现整个用例的测试,这样随着用例的增加,能比较规范地、系统地完成测试,便于后续的维护,同时对后续用例执行完成后会生成一个测试报告。我们会进行一个模块分层,把它分为公共模块common,数据模块data,report报告模块,runner执行模块,编写用例模块。
             接下来我就拿我之前测试项目中比较核心的“我要出借”流程来举个例子,首先要导入对应的库, from selenium import webdriver,还有import unittest,分别导入selenium库和unittest库, 然后新建一个继承unittest.testcase类的我要出借的类,我一般会把需要的前置条件在setup结构中编写, 像是dr.window.chrome()选择谷歌浏览器,用dr.get方式 获取网址打开,用maximize.window进行浏览器最大化处理,避免出现页面中元素定位后无法点击 报错的现象,确保用例执行的准确性,因为有时候用例执行太快,而网页加载太慢会 导致报错, 所以我一般都会用implicity_wait进行智能等待,确保页面加载完成后再执行下 一步, 在写‘我要出借’测试用例之前我会先一个登录的用例,我们会在公共模块调用登录模块 find_element_by_text_link定位的方式点击登录按钮,之后的话是开始进行‘我要出借’流程的编写,因 为我要出借的选择的话一个隐藏列表,所以要先导入对应的模块,就是from selenium.webdriver.common.action_chains import ActionChains,用 find_element_by_id的方式定位我要出借,然后用 action charis(dr).move_to_element().perform把鼠标移动到隐藏列表中,最后用xpath定 位选择优选自助出借,之后用find_element_by_name点击立即出借,之后的话出现一个确认 出借的页面,因为确认出借的页面是一个iframe弹框,所以首先是用switch_to_frame进 入,用id定位方式分别输入账号密码,至于输入金额的话为了提高效率,我是之前已经写好 了随机生成金额的关键字,所以我这边直接调用就可以了,至于验证码我之前就已经请开发 帮我去掉了,因为输入确认出借的按钮是在当前页面以下,未显示出来,所以我一般会用 document.documentelement.scroll 500进行网页下滑,然后用Xpath定位点击确认出 借后用switch_to_default_content退出iframe弹框,这时候为了保证用例执行的准确性, 我一般会用 assertEquals方法进行断言,首先dr.title获取title信息,之后用 assertEquals判断获取到的title信息是否与实际的相符,如果不一致输出原因,一致的话 则执行以下操作,之在还原环境teardown的时候把浏览器关闭,进行扫尾工作,最后到执行和生成报告了,首先导入生成报告所需的HTMLTestRunnerCN模块,用 unittest.defaultTestLoader.discover(test_dir, pattern='kj2.py')方法把当前文件所有test开头的用例集合在一起,然后定义好报告的保存路径,用HTMLTestRunnerCN.HTMLTestRunner把steam、title(报告标题)、description(用例执行详情)、tester(测试人员)等进行编写,最后用run的方法运行,执行完成之后可以在你保存的路径下,找到生成的报告进行总结分析。以上就是我大概的一个自动化开展过程。

    案例二:

    我最开始接触自动化使用rf框架做的,但是工具的局限很大。所以我目前做ui自动化基本都是用的python加selenium库。
    先导入webdriver和time库中sleep模块。
    我做自动化都是用的chrome浏览器,先用webdriver.chrome()调用驱动,赋给一个变量browser,然后用get方法打开项目首页,在最大化浏览器maximize_window,防止有些元素加载不完全或者点击不到。然后我会用一个implicitly_wait隐式等待方法,因为网速追不上程序的运行速度。如果是页面不跳转在页面加载元素的话,我会选择再用个sleep方法强制等待2S左右,因为不跳转的时候implictly wait不会生效,如果需要定位这些元素就会定位不到。
    进入后先登录,通过link_text定位登录这个链接元素,用click点击,然后定位用户名输入框和密码输入框,用send_keys传入账户名和密码,然后用xpath定位确认登录按钮用click点击,登录就完成了。这个时候回跳转至首页。
    项目首页就有投资模块的入口,用find_element_bylinktext找到元素然后用click点击,这个时候页面会跳转,跳转完是进入标的搜索页面,选择标的类型:正常的标投资或者债权转让,标的时间,我们项目是1月,2月,12个月,标的类型是用click就可以点击实现了,时间选择我们是个下拉框,需要先导入select模块,然后先select接这个元素,然后用select by index方法,选择1个对应的值。这里说明下我为什么用index,因为有时候会换中英文,或者value值,会导致脚本失败,而index就可以避免这种情况了。选择完这两个后等待元素的加载,这里也是用sleep,选择某一个标的投资按钮,也是用xpath定位然后click点击,这个时候页面新开一个确认投资窗口,这个时候就涉及到页面的切换,这里涉及到一个利用句柄handle切换窗口,先使用browser.window_handles获取所有句柄,索引位-1就是最新的窗口的,用switch_to_window()接新窗口的句柄就可以切换窗口了。然后用send_keys传入投资金额,支付密码,然后验证码是让开发同事写成了固定的字符,短信验证码关闭了。然后点击确认投资换这个button,也是用xptah定位,click点击。这个时候页面会跳转显示投资成功,这里我会用投资完成这个文本来做断言,用的是if  not 加上assert  false做的。然后就关闭浏览器用quit。然后前台的操作就完成了,再进入数据库校验数据,这里需要导入mysqldb模块,然后用connect连接项目的数据库,用cursor获取游标,(游标就是一个数据的缓存区,用execute方法就可以吧sql语句取出来的临时表放入游标中,fetchall就可以把游标内的数据都是放在toupl容器中,通过索引位就可以把真实数据取出来做断言了)用execute接sql语句来获取对应的投资者在此项目的投资金额,在用fetchall取出此数据,断言这个数据是否等于我们在前台输入的投资金额。然后就断开数据库链接,关闭浏览器。这就是我的大概流程了。

    讲解注意事项:

    1.上台讲的时候尽量让自己冷静下来,减少紧张

    2.不要有多余的动作,也不要太过死板,这样会给人感觉你很紧张

    3.语速要控制好,不能太快,吐词要清晰,声音要适当

    4.描述业务的时候思路要清晰明了,尽可能多的用到学过的关键字

    5,有多种方法实现一个功能时,最好说个人习惯用某个,还可以用某些,为什么

    6.除了UI层的自动化测试,还可以说些接口层和数据库层的自动化测试方法

    7.自己熟悉的关键字尽可能多的说,不熟的就可以忽略,不要自己挖坑跳

  • 相关阅读:
    [archlinux][plasma][screensaver] plasma5配置屏保程序,没成功(-_-#)
    [skill][https][ssl/tls] HTTPS相关知识汇总
    [dpdk][kernel][driver] 如何让DPDK的UIO开机自动加载到正确的网卡上
    [archlinux] linux boot process/order/stage
    [potatos][flex][TBC] 语义分析词法分析 flex
    [daily][tcpdump][bpf] 如何用tcpdump抓到一个分片包
    [daily][dpdk] 网卡offload识别包类型;如何模拟环境构造一个vlan包
    [skill][c] *(char**)
    [apr] Apache Portable Runtime
    [skill] mmap / fwrite / write linux磁盘读写的分层结构
  • 原文地址:https://www.cnblogs.com/xiaolehua/p/13859669.html
Copyright © 2020-2023  润新知