• 0
  • 0
分享
  • 程序执行报错,如何进行问题调试?——软件测试圈
  • 曼倩诙谐 2021-07-15 10:59:01 字数 4144 阅读 944 收藏 0

  很多新手小白对于程序执行报错,不知道怎么debug进行调试。我也是在学习中发现,这个问题比较有参考价值,因为大神对于这种问题都不屑一看。

  因此有相同问题的小伙伴可以看看我这篇文章,参考一下思路。

  代码程序要实现效果:

  测试用例一共2条case,错误的和正确的:

  ·输入错误用户名、密码,登录,弹出提示,验证提示语正确

  ·输入正确用户名、密码,登录,登录成功,验证标题正确

  1.0版本源代码

#导入相关包
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from time import sleep, time
from selenium import webdriver
import pytest
from page.BasePage import BasePage
from page.user_login_page import Test_admin_login_page
from Util import util
#类名称
class TestUserLogin(object):
#初始化函数
    def setup_class(self):
        self.driver=webdriver.Chrome()
        self.adminpage= Test_admin_login_page(self.driver)
        self.adminpage.goto_admin_page()
        self.logger=util.get_logger()
        self.logger.info('登录功能')
#配置参数
    login_data=[('wangxin1','123456','账号或密码不正确'),
                ('wangxin', '123', '卡车调度系统')
    ]
#pytest 调用参数
    @pytest.mark.dependency(name=login_data)
    @pytest.mark.parametrize('username,pwd,expect',login_data)
#实现登录功能
    def test_user_logon_username_pass(self,username,pwd,expect):
        self.logger.debug('输入用户名称:%s ', username)
        self.adminpage.input_username(username)
        self.logger.debug('输入密码:%s',pwd)
        self.adminpage.input_pwd(pwd)
        self.logger.debug('点击登录')
        self.adminpage.input_btn()
#作判断
        if username =='wangxin1':
            WebDriverWait(self.driver,5).until(EC.alert_is_present())
            time.sleep(2)
            alert=self.driver.switch_to.alert
            time.sleep(2)
            assert alert.text==expect
            alert.accept()
            time.sleep(2)
        else:
            WebDriverWait(self.driver,5).until(EC.title_is(expect))
            sleep(3)
            assert self.driver.title==expect
            self.driver.quit()
#调用
if __name__ == '__main__':
    pytest.main()

  运行成功后提示如下:

2-1.png

  实际运行效果是用例都执行了,但是就是结果显示failed。


2-2.png

  于是在感觉出问题的if语句处加了一下断点,一步步调试,点击下面箭头指的下一步。

2-3.png

  执行过程种发现执行if语句后直接转到else语句后面,证明alert语句没执行成功。

  为什么没执行成功呢?发现提示语是一个message而非alert。那有没有可能这块写错了呢?于是重新改写将提示语定位。

WebDriverWait(self.driver,5).until(EC.visibility_of_element_located(toast))
sleep(3)
msg=self.driver.find_element(*toast).text
assert msg == expect

  运行报错:

2-4.png

  说明运行WebDriver wait等待5s钟后没有定位到元素报异常。时间调长一点再调试,仍然报错,其实就是元素未定位到。

  将css定位改为xpah定位,再次运行成功。

WebDriverWait(self.driver,5).until(EC.visibility_of_element_located(toast))
msg=self.driver.find_element(*toast).text
sleep(2)
assert msg == expect

  2.0版本代码

#导入相关包
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from time import sleep, time
from selenium import webdriver
import pytest
from page.BasePage import BasePage
from page.user_login_page import Test_admin_login_page
from Util import util
#类名称
class TestUserLogin(object):
  #初始化函数
    def setup_class(self):
        self.driver=webdriver.Chrome()
        self.adminpage= Test_admin_login_page(self.driver)
        self.adminpage.goto_admin_page()
        self.logger=util.get_logger()
        self.logger.info('登录功能')
  #配置参数
    login_data=[('wangxin1','123456','账号或密码不正确'),
                ('wangxin', '123', '卡车调度系统')
    ]
  #pytest 调用参数
    @pytest.mark.dependency(name=login_data)
    @pytest.mark.parametrize('username,pwd,expect',login_data)
  #实现登录功能
    def test_user_logon_username_pass(self,username,pwd,expect):
        self.logger.debug('输入用户名称:%s ', username)
        self.adminpage.input_username(username)
        self.logger.debug('输入密码:%s',pwd)
        self.adminpage.input_pwd(pwd)
        self.logger.debug('点击登录')
        self.adminpage.input_btn()
    #作判断
        if username =='wangxin1':
            WebDriverWait(self.driver,5).until(EC.visibility_of_element_located(toast))
            msg=self.driver.find_element(*toast).text
            sleep(2)
            assert msg == expect
        else:
            WebDriverWait(self.driver,5).until(EC.title_is(expect))
            sleep(3)
            assert self.driver.title==expect
            self.driver.quit()
if __name__ == '__main__':
    pytest.main()

  总结

  回顾下刚刚写完代码报错却不知道怎么解决的话,处理办法总结如下:

  ·能定位到某个语句的报错,可以看报错信息;

  ·如果没有报错信息,或者报错信息不能区分,Debug运行调试;

  ·Debug调试,应该走的语句没走就能定位这块有问题,比如上面就是提示语提醒我给当作alert定位造成没有定位到。



作者:桃子   

来源:51Testing软件测试网原创


  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • Web自动化测试 —— 测试环境搭建 (Selenium+Python) Windows篇环境搭建前的准备:到Python官网下载Python安装包:https://www.python.org/如果不能访问,可以试试下面的解决办法:安装VPN网络连接工具,推荐用绿色VPN,我用的时候是免费的。百度搜索一下“的Python官网无法访问解决办法”或“Python的最新官方版本下载”。进入Python官网后,点击下载菜单,进入下载界面,截止本文写作时间,Python最新版本号为3.6.1,如果你是电脑是Windows操作系统,可以直接点击“下载Python 3.6.1”按钮下载保存Windows ...
            13 13 2129
            分享
          •   作为一个测试,最尴尬的莫过于分给你的task,别人做交叉兼容测试的时候,在你负责的内容里找出了很多你没有测试出来的bug。  我也曾因为测试不全被组长在工作群里艾特。说实话,真的恨不得找个地方躲起来。  为了避免自己再次出现类似的情况,我开始写测试笔记。记录负责task中需要测试的内容,然后不断的重复研究测试,这种情况就基本没有了。  复杂的测试笔记,我写了有两年,后来慢慢发现好多东西都是相通的。于是,我整理了一个做测试的模板,每次新分配给我task时,我都按我自己的模板测试。  我做的工作是黑盒测试,基本属于纯黑盒。测试的有web端,android手机端和ios手机端,偶尔也会测试手机带...
            0 0 743
            分享
          • 无人在意双12今年双12还没开始就结束了。12月12日一早,宁波老板陈强打开手机,看了一眼空空如也的仓库订单,上街买了一屉肉包子。“似乎没人记得今天是双12了,我也只能吃饱了继续睡。”陈强名下有一家第三方发货仓库,规模达上万平方米,专门服务于电商平台商家。往年从双11到双12,他基本是睡在仓库里,以便随时处理订单。而今年双11期间,宁波干线快递不通,许多城市难以发货,他的生意有些惨淡——没想到双12更加清冷。这天中午,高敏为了买酒精和N95口罩,来回在各大电商平台切换,看看谁家能快速发货,却得到失望的结果。她这时才后知后觉地发现已经到了双12。想想每年双12她都会提前备起年货,而今年只能抢酒精...
            0 0 964
            分享
          •   微软就最近曝光的美国国家公共数据(NPD)漏洞发布了一个新的支持页面。这是由网络犯罪集团 USDoD 发起的网络攻击导致的大规模漏洞,受影响人数远超 1.5 亿,近 300 万条个人敏感数据记录(如社会保险号 (SSN)、家庭住址、姓名等)被泄露。  美国监督与问责委员会证实,它正在调查此事,以更好地了解事情的经过和原因。NPD从公共记录、国家和州数据库以及法院文件(包括一些非公开来源)中收集信息。然后,这些私人数据被出售给各种组织,如背景调查网站、调查员、应用程序开发商和数据转售商。  微软在其支持文件中解释了发生的情况:  2024 年初,在线背景调查和防欺诈服务公司 National...
            0 0 280
            分享
          • http/https在哪层?http/https在应用层、tcp在传输层、ip在网络层接口请求有哪几种:http/https:get、post、put、deletepost请求参数由几种类型:主要有四种方式:application/x-www-form-urlencoded(数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码)multipart/form-data:二进制编码,数据一般以文件形式上传application/json:json格式数据text/xml :入参是xml格式的,一般以字符串形式传递,若遇到编码问题则增加...
            0 0 1569
            分享
      • 51testing软件测试圈微信