• 比方说你这个脚本有命令注入的漏洞,那攻击者就可以通过这个漏洞拿到 root 用户的执行权限 ------ 嗯,我编不下去了😂 😂

  • 个人想法,说错勿怪,自动化框架还是有用的,只是看框架的设计本身。框架设计包含了设计者对自动化测试认知,如何使框架在技术上符合大多数测试场景,设计上规避掉自动化测试的主要风险,使用上降低使用者的入门难易度、增强团队协作和易用性,是否有设计者对框架使用规范上做出建议等等。出发点都是提升自动化的优势,降低自动化的劣势,平台化能好用,是因为它本身集各个数据于一身,在做数据关联和数据统计时,会更加有优势,但底层运行依然是以自动化框架为基础。不是框架不好,而是要考虑是否框架已足够好。

  • #coding=utf-8
    from copy import deepcopy
    
    def handle(countNum):
        if countNum<1:
            return []
        a=[[1],[2],[3],[4],[5],[6]]
    
        for num in range(1,countNum):
            b=[]
            for one in a:
                for i in range(1,7):
                    oneCopy=deepcopy(one)
                    oneCopy.append(i)
                    b.append(oneCopy)
            a=deepcopy(b)
        return a
    
    print(handle(3))
    print(len(handle(3)))    
    

    没理解错,你是要所有骰子的点数的列表,看看这个是你要的不,随便写的,命名不规范。。

  • 如果交易接口在你这,你直接调动交易接口作为查询前置,接口查询的数据可以通过交易数据结合业务规则换算出来,比方说贷款 12 万,分 12 期,每期偿还的本金就是 1 万,那查询接口里当期还款本金就是 1 万。要测不同的查询规则,就提供不同的交易前置数据,额,我这边反正是这么干的

  • 我对你实际的测试场景不是很清楚,我觉得奇怪的原因是这种单查询,比对接口和数据库数据是否就已经脱离了业务。要做这种查询校验我个人觉得需要从数据源头来,如果是交易造的数据,可使用前置来造,然后根据业务来判定返回的值是什么,这样接口数据直接就可以根据业务知道。如果是文件导入,那可以从文件里解析再和查询结果比对等等。我并不了解你那边的实际情况,可能你脚本查询数据库数据时就已经包含了业务规则的过滤,如果说错了勿见怪。我再说下我这边现在处理这种接口的方式,我这边有一个场景是贷款分 12 期,查询的结果是 list 里有 12 个 dict,框架的处理是设定特殊写法,直白点的写法类似:字段 A(字段 B=B 值)=A 值,通过 B 值来循环确定字段 A 所在 dict,字段 B 可以为当前分期数,然后拿到 A 字段值和期望值 A 值做对比。你那是不是可以考虑根据某个或某几个字段来确定 dict,然后再进行 dict 对比。最后我不是大佬

  • 总感觉拿后端从数据库里查出来返回的数据再和数据库里的数据做全量对比有点奇怪。。

  • 2 at December 05, 2018

    嗯,除非浏览器的兼容性问题导致 input 的 min 和 max 的功能失效,不过这些属性是原生的,应该不会出现这个问题,如果担心出这个问题,可以用接口测试补上不在 1 和 5 之间的接口用例测试后端对异常数据的处理

  • 2 at December 05, 2018

    哦 没注意看 这个用了 input 自带的属性 min 和 max 来做校验 你校验这个提示貌似没什么意思 你相当于是校验 input 本身功能 如果你要校验前端设计页面填的 min 和 max 是不是正确 感觉直接校验这个控件的 min 和 max 属性会更好处理一些

  • 2 at December 05, 2018

    确定不是 html 元素?

  • 也许我对九宫格的选取节点的功能不了解,或者自己给自己找茬,我是想说节点选择后不能再选,如此我考虑一个回退的问题:如果前提是不能跳选的话,当节点数是 5 及以上的时候,可能会出现没有节点可选的情况,比方说 4,5,8,7 这个时候第 5 个节点没法再选了,所以需要回退到 8 这个节点,同时把 8 节点当前可选的节点中去掉 7 节点,然后再随机选择节点。直到选择到足够数量的节点为止。

  • 
    import random
    
    
    def getCanSelect(n,address,isSelectAddress):
        initNumX=address[0]
        initNumY=address[1]
    
        canBeSelect=[]
        if n>0:
            for x in range(initNumX-1,initNumX+2):
                if x<3 and x>-1:
                    for y in range(initNumY-1,initNumY+2):
                        if y<3 and y>-1:
                            if abs(initNumX-x)+abs(initNumY-y)<3:
                                if initNumX==x and initNumY==y:
                                    continue
                                newaddRess=[x,y]
                                if isSelectAddress.count(newaddRess)==0:
                                    canBeSelect.append(newaddRess)
    
            while True:
                if len(canBeSelect)>0:
                    indexNum=random.randint(0,len(canBeSelect)-1)
                    nextAddress=canBeSelect[indexNum]
                    isSelectAddress.append(nextAddress)
                else:
                    raise Exception
    
                try:
                    getCanSelect(n-1,nextAddress,isSelectAddress)
                except Exception as e:
                    #如果出现异常说明节点选择不对,需要重新选择
                    canBeSelect.remove(nextAddress)
                    isSelectAddress.pop()
                    continue
                break
    
    def selectNum(n):
        nodeMap={1:[0,0],2:[0,1],3:[0,2],4:[1,0],5:[1,1],6:[1,2],7:[2,0],8:[2,1],9:[2,2]}
        node=[[1,2,3],[4,5,6],[7,8,9]]
        isSelectAddress=[]
    
        initNum=random.randint(1,9)
        address=nodeMap.get(initNum)
        isSelectNum=[]
        isSelectAddress.append(address)
    
        getCanSelect(n-1,address,isSelectAddress)
        for index in isSelectAddress:
            x=index[0]
            y=index[1]
            isSelectNum.append(node[x][y])
    
        return tuple(isSelectNum)
    
    print(selectNum(9))
    

    妈蛋,写了 2 小时,还不知道是不是真的都考虑到了,面试要求这么细的话,铁定挂了

  • 我记得用法是差不多的,只不过你需要先启动一个本地监听的服务器,jacoco 本身有提供,类名是 ExecutionDataServer.java,需要配置远程服务器地址和本地的监听端口。服务器上需要配置启动监听的服务器地址和端口。覆盖率数据会自动上传到你监听服务器设定的路径里,并生成 exec 文件。

  • 感觉这个应该找不到,我之前的做法是使用图片识别来辅助关闭,不过刚刚操作了一下,貌似打印页面在谷歌里启来的时候会另起一个谷歌进程,是否也可以根据 pid 来杀,静待论坛高手

  • 额,为什么在下单前不使用接口创建一个用户出来?怕垃圾数据太多的话,可以做个用户名和运行次数映射?

  • 看你这个需求,测的是前端处理后端各类返回的测试?mock.js?

  • 你这个异常是指的代码的异常吗?如果不是,后面写的别看了,如果是的话,那个人观点,这两者没什么可比性。异常是给开发人员看的,响应结果是给用户看的,比方说 1/0 报 ArithmeticException,而你把这个异常扔给用户看,用户就一脸懵逼。代码里需要把这个异常抓到,然后返回用户可以理解的响应信息,比方说返回除数不可以为 0

  • a='1'
    print(a.class.name)
    class 和 name 两边的两个_

  • 呃,那什么,前辈,在这贴问个技术类的问题,应该没事吧。之前有考虑在自动化测试里引入人工智能,但是我看了点书了解了一些,好像貌似人工智能都是以大数据作为数据基础,可能我了解的浅,不知道您觉的人工智能在自动化测试中应该怎么应用?感谢

  • 哈哈,你可以的,马甲换的够快的

  • 我试了下,使用元素的 send_keys(Keys.F12) 可以弄出来,你那边试试?