• 问题已解决 5 at March 15, 2018

    你也自动传时间进去就可以了啊
    例如: event['create_time']=time.now() 类似这样加进去

  • 问题已解决 5 at March 15, 2018

    字段没有设置默认值 看下表里这个字段是不是为空的,然后有没传值。
    或者把 sql 打印出来,手动执行看会不会报错

  • 感觉面试官想考察的是应聘者的总结、表达能力。确实有遇到过做了两三年的项目,却说不出项目是在做什么,或者条理说的很乱的应聘者。

  • 可以使用 jmeter 或者 loadrunner 录制一下相关的接口,简单压测一下。

  • 觉得挺有意思的题目,写不了一楼大神的代码,只能用最笨的做法来写:

    根据题干定义好 question1-10。用穷举法 组合出 10 道题的答案组合,然后对每个穷举的组合,和通过题干计算的答案组合是否匹配。
    跑一下脚本,结果是第 80009 种组合是正确答案: ['B', 'C', 'A', 'C', 'A', 'C', 'D', 'A', 'B', 'A'] 。答案与一楼大神的结果一致。

    def question1():
        return newanswerList[0]
    
    def question2():
        if newanswerList[4]=='A':
            return 'C'
        elif newanswerList[4]=='B':
            return 'D'
        elif newanswerList[4]=='C':
            return 'A'
        elif newanswerList[4]=='D':
            return 'B'
    
    def question3():
        list3 = [newanswerList[2],newanswerList[5],newanswerList[1],newanswerList[3]]
        answerList = ['A','B','C','D']
        i = 0
        j = 1
        contin = 1
        while (4-i) and (3-j) and contin:
            if list3[i]==list3[j]:
                i +=1
                j +=1
            elif list3[i]==list3[i+2]:
                return answerList[i+1]
            else:
                return answerList[i]
    
    
    def question4():
        list4 = [newanswerList[0]==newanswerList[4],newanswerList[1]==newanswerList[6],newanswerList[0]==newanswerList[8],newanswerList[5]==newanswerList[9]]
        answerList = ['A','B','C','D']
        for i in range(4):
            if list4[i]:
                return answerList[i]
                break
    
    
    def question5():
        list5 = [newanswerList[7],newanswerList[3],newanswerList[8],newanswerList[6]]
        answerList = ['A','B','C','D']
        for i in range(4):
            if list5[i]==answerList[i]:
                return answerList[i]
                break
    
    def question6():
        list6 = [[newanswerList[1],newanswerList[3]],[newanswerList[0],newanswerList[5]],[newanswerList[2],newanswerList[9]],[newanswerList[4],newanswerList[8]]]
        answerList = ['A','B','C','D']
        for i in range(4):
            if list6[i][0]==list6[i][0] and list6[i][0]==question8():
                return answerList[i]
                break
    
    def question7():
        list7 = [newanswerList[0],newanswerList[1],newanswerList[2],newanswerList[3],newanswerList[4],newanswerList[5],newanswerList[6],newanswerList[7],newanswerList[8],newanswerList[9]]
        answerList = ['A','B','C','D']
        countList = []
        for i in range(4):
            countList.append(list7.count(answerList[i]))
        for i in range(4):
            if countList[i]==min(countList):
                return answerList[i]
    
    
    def question8():
        list8 = [newanswerList[6],newanswerList[4],newanswerList[1],newanswerList[9]]
        answerList = ['A','B','C','D']
        for i in range(4):
            if abs(answerList.index(newanswerList[0])-answerList.index(list8[i]))>1:
                return answerList[i]
    
    def question9():
        list9 = [newanswerList[5],newanswerList[9],newanswerList[1],newanswerList[8]]
        answerList = ['A','B','C','D']
        for i in range(4):
            if (newanswerList[0]==newanswerList[5])!=(newanswerList[4]==list9[i]):
                return answerList[i]
    
    def question10():
        list7 = [newanswerList[0],newanswerList[1],newanswerList[2],newanswerList[3],newanswerList[4],newanswerList[5],newanswerList[6],newanswerList[7],newanswerList[8],newanswerList[9]]
        answerList = ['A','B','C','D']
        list1 = [3,2,4,1]
        countList = []
        for i in range(4):
            countList.append(list7.count(answerList[i]))
        diff = max(countList)-min(countList)
        if diff in list1:
            return answerList[list1.index(diff)]
    
    def compareResult(newanswerList):
        respectList = [question1(), question2(), question3(), question4(), question5(), question6(), question7(),
                       question8(), question9(), question10()]
        if None in respectList:
            return 0
        else:
            result = (respectList == newanswerList)
            if result:
                print('result is correct! ', newanswerList, respectList)
                return 1
            else:
                return 0
    
    
    
    resultList = ['A', 'B', 'C', 'D']
    answerList = [0,0,0,0,0,0,0,0,0,0]
    
    
    
    countA = 0
    k = 0
    newMod = 0
    for i in range(4**10):
        count = int(i/4)
        modCount = i%4
        j = 0
        answerList[0] = modCount
        while count :
            j +=1
            answerList[j]=count%4
            count = int(count/4)
        newanswerList = []
        for k in range(10):
            newanswerList.append(resultList[answerList[k]])
        if(compareResult(newanswerList)):
            print(newanswerList,i)
            break
    
    

  • 看下 appium 启动了吗? ip 对不对?

  • 你是要在节点上执行 java 代码? 抱歉,我刚刚理解有误。
    目前没这种使用需求,没研究过。

  • 用的 python,不过原理相类似,仅供参考:
    使用 selenium.webdriver.remote.webdriver.WebDriver 进行初始化, 要在某个 node 节点上操作,就传入该节点的 ip :

  • 我原文是 “搜索结果能增加排序功能” 搜索结果就是一个数据集合,在展示前对数据进行多一层排序处理,不冲突, 也没混淆概念吧?

  • 按时间筛选也可以满足部分需求。
    其实我是觉得可以提供一些排序规则给用户进行选择,比如按时间、回帖数量、热度数量等信息,来查看最新、最多人讨论、最热的帖子。

  • 大龄女青年的跳槽烦恼 at March 02, 2018
    1. 测试和开发使用的语言不一定要一样的。 我们项目 Android、ios、web ,几个端使用的语言都不一样, 完全不影响我们用 python 搭建自动化、接口、性能测试框架。 测试代码和测试对象之间不存在语言相同的必要条件。
    2. 重要的是起步,不是说一步到位就把整套框架弄起来。可以先弄一套简单的用起来(例如用最简单的 unittest 管理用例),慢慢添加功能,慢慢改造、优化。
    3. 自动化、接口等等使用的工具,现在网上大把资料,真的没难到需要有人手把手教的地步。
    4. 还是看你决心有多大,自己都认为自己不行,做不了,那么永远发掘不了自己的潜力。
  • 搜索结果也可以有排序嘛

  • 大龄女青年的跳槽烦恼 at March 02, 2018

    工作很轻松,说明是有空余时间,那为什么不自己把这些会的东西用到项目里去呢?
    不主动去实践,经验不会自动增加,而且领导很难,也不敢主动给毫无经验的你实践的机会 。


  • 检查一下 Capabilities 里配的版本号吧。 另外这个配置项可以试下配为空,这样切换不同测试机测试的时候不需要改对应的配置。

  • TypeError: Invalid Version: android-4.4W
    检查下版本号配对没

  • 用 adb devices 命令看下设备是否已经连接上电脑?

  • 论坛上搜一下

  • 👍

  • 没使用 unittest, 通过 Python 的多线程模块实现的并发,仅供参考: from multiprocessing.dummy import Pool as ThreadPool

  • 我觉得要看你测试的目的和侧重点:

    1. 如果是侧重业务流程的测试,上面说的方式就需要三个用例串起来执行。 这时可以考虑通过特定用例集的方式结合起来测试。
    2. 如果是侧重接口的回归,那么订单号、收货地址都可以不依赖对应的接口来实现。 例如收货地址,可以直接写死或者配置多个来选择就可以了。业务流程实际上也是三个接口独立保证的,如果验证覆盖全了,三个接口分别测试通过,和把三个接口连起来一起测试通过,效果是一样的。

    我是倾向用第二种的,因为保持用例间的独立性,才能保证用例的独立执行。

  • 用例 A 依赖用例 B ,是指上下文的依赖吗? 比如做查询(用例 B)之前需要先登录(用例 A)拿到 token?

    这种场景我们目前没遇到,感觉可以往这方面考虑:

    1. 如果一个前置用例是通用的(例如所有操作都需要先登录), 可以考虑把获取到的用户名、token 等信息保存到公共配置表里,其他用例从配置表里读取这些信息。 这样需要保证执行其他用例前先执行前置用例。
    2. 如果是单个用例之间的依赖,可以考虑在用例表中添加前置用例 ID、参数列表两个字段。 如 用例 B 依赖 用例 A 的 A1、A2 两个字段(可以用 json 存储为同一个字段里),则执行时先执行用例 A ,并通过获取到的 A1、A2 字段,再执行用例 B
  • 刚做完一套类似的,关系是这样:
    test_api : 接口信息
    test_case: 具体的某一条用例, 与 test_api\ test_suite 均通过外键关联
    test_suite: 测试集, 与 test_api\ test_case 均通过外键关联

    其中一个 test_suite 下可以关联多个 test_api , 每个 test_api 下面关联多个 test_case

  • 反过来想想, 你有什么技能是离不开公司的呢?

  • chrome:点击元素,右键 - 检查
    Firefox:点击元素,右键 - 查看元素

  • 之前曾从 selenium 移植过下拉框选择的方法到 macaca ,仅供参考
    https://testerhome.com/topics/10590