• 😂 面试完去实习的第一天, 技术部负责人告诉我:我们这边开发也缺, 你愿意的话也可以做开发去, 再给我一次机会,也许我会给出不一样的答案。。

  • 楼主在文章里面说了一句:开发对待技术的优势往往是深度,测试往往是广度。

    大概在我想来就是测试能考虑到的方面更多。然后你需要作为一个中间人来协调各方,大概这就是立足点吧。 (小声bb)

  • 问一个关于 unittest 的问题 at November 20, 2018
    class mytest(unittest.TestCase):
    def setUp(self):
    self.para = 0
    print('setup: %s' % self.para)

    def test01(self):
    self.para = 2
    print('t1: %s' % self.para)

    def test02(self):
    self.para = 4
    print('t2: %s' % self.para)

    def test03(self):
    self.para = 6
    print('t3: %s' % self.para)

    def tearDown(self):
    pass

    结果:

    ...

    Ran 3 tests in 0.000s

    OK
    setup: 0
    t1: 2
    setup: 0
    t2: 4
    setup: 0
    t3: 6

  • 给他点一下归零啊

  • 😅 感觉工作一年多了,自己身为测试人很浮躁很迷茫,听君一席话 不说少读十年书,半年也该有的 哈哈哈哈

  • sudo 不能丢啊 手动斜眼笑

  • 核心是不可能核心的,这辈子都不可能,bug测不出来,线上天天爆炸,只好水水论坛,这里的老哥讲话超好听,我超。。。
    咳咳,跑题了,我也认同开发是核心的观点,产品决定价值,开发决定上限,测试决定下限。。。大概就是我的理解吧


  • 了解一下 →.→

  • 302 重定向问题 at May 14, 2018

    老哥你说对了,使用新的后端框架之后,凡事后端返回的http状态码为403的都被移动重定向到移动导航页了。。。,之前请求失败,status_code 均返回200, 前后端处理异常的错误状态码都在接口返回的字段里面定义,这一次直接返回了真实的http 状态码结果就拉闸了。

  • 一般似乎都是 python manage.py migrate 这样初始化数据库的吧 0.0

  • 我们来正视这个问题 at April 10, 2018

    也不知道你是怎么过度解读这些话的,我也没看出来哪里造福社会了,是谁再偷换概念?
    现在测试人员普遍水平底下不是现状?就知道点点点,哎哎哎 这里不对,那里不对, ,好多,连调试工具都不会用,出现问题出在前后端都分不清。
    面试成功率10% 这个我确实不知道他们是怎么得出的结论,但是测试工作不好找确实是现状。
    最后别人的付出就一定要无偿? 全世界围着你转?
    更何况现在知识付费逐渐成为主流,有什么不对?
    你无非就是觉得里面的东西,你很想要,但是没钱,拉闸。
    知识的分享是一种变相的开源精神,但这并不是作为道德约束的理由。
    匿名 用着奇怪的语调说些酸的要死的话,不嫌丢人。
    别回我了,我真的不想和脑回路有问题的人交流。

  • 我们来正视这个问题 at April 10, 2018

    所以我想问几个问题:
    1.是不是自己没钱就在酸? 或是酸那些可以去接受新知识的,亦或是酸那些通过劳动获取报酬的人?
    2.为什么通过自己的劳动,把自己花了很多时间了解的知识教给别人,然后获取一定的报酬 有什么问题吗?
    3.培训,有逼你去吗? 不去培训你就不让你浏览其他社区里的资源了?
    4.有勇气提出问题没脸见人?既然实名也不知道你是谁,为何要再批一层虚伪的面具。
    5.“搞个培训像在造福社会一样”,,,哪里体现出来的,可以举证一下吗?

    最后:我实名,我不怕别人说我,我也没有参加培训,更没资格培训别人。

  • HttpRunnerManager 正式发布 at April 07, 2018

    看了下密码居然是明文的,,emmm我觉得可以考虑将密码进行一种加密算法后存到数据库
    然后用户登录的时候用同样的加密算法加密后和数据库的数据进行校验,这样安全性会不会好一点?

  • 马克,,一直想学一下,又懒。。懒是原罪啊

  • HttpRunnerManager 正式发布 at April 04, 2018

    😂 感谢楼主的分享。
    弄了一天终于部署到自己服务器上了,django部署的坑是真不少。。

  • 一行就厉害了。。
    例行献丑。..初学。哈哈

    m = [[1, 2, 3, -1], [4, 5, 6, -2], [7, 8, 9, -3]]
    n = []

    for x in range(0, len(m[0])):
    a = []
    for y in range(0, len(m)):
    a.append(m[y][x])
    n.append(a)
    print(n)
  • 这个文案确实是招聘届的一股清流。赞。

  • 我会大概考虑几个方面:

    1. 先用五分钟来确定功能是否可用,五分钟之后是否不能自动登录了。
    2. 时间的定义是 7*86400 ,还是7天后的23:59:59
    3. 使用360全家桶一类的清理工具是否会清理cookies,导致功能失效。
    4. 修改密码,仍可以?
    5. 单点登录的话,异地登录是否还能保持自动登录。
    6. 时间允许的话,过夜设置一天 试试。。

    上班忙里偷闲,答一个 哈哈哈

  • 如果让我这么做的话我会把aseert简单封装一下,在catch异常退出浏览器之后,再次调用启动浏览器共用方法,事先在pageobject中提供通用的进入该页面方法。 可能我的方法比较笨,哈哈哈。

    import unittest
    from selenium import webdriver

    def newChrome(page):
    dr = webdriver.Chrome()
    ''''go to page'''
    print('open a new webdriver!')
    return dr

    #将assert方法简单封装
    def compare(msg, target, name, page, dr):
    try:
    assert msg == target
    print('%s pass \n'%name)
    return dr

    except Exception as e:
    print('an error occured in %s'%name)
    dr.quit()
    print('webdriver quit! \n')
    return newChrome(page)


    #测试类DEMO
    class Mytest(unittest.TestCase):

    @classmethod
    def setUpClass(self):
    self.dr = webdriver.Chrome()
    print('setUp')

    @classmethod
    def tearDownClass(self):
    self.dr.quit()
    print('tearDown \n')

    def testcaseA(self):
    self.dr = compare('1', '1', 'testcaseA', 'page', self.dr)

    def testcaseB(self):
    self.dr = compare('1', '2', 'testcaseB', 'page', self.dr)

    def testcaseC(self):
    self.dr = compare('2', '2', 'testcaseC', 'page', self.dr)

    if __name__ == '__main__':
    unittest.main()
  • 在一个测试类下的testcase是按照ASCII的顺序执行,不同文件下还真没研究过。。

  • 容器管理平台 rancher 简介 at November 26, 2017

    干货啊,赞一个

  • 今天上线的东西太多了,,都没空来逛社区。。

    核心代码如下:

    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get('http://127.0.0.1:5000/HimoMP')
    js = "document.getElementById('Title').style.display='block'" #编写JS语句
    driver.execute_script(js) #执行JS
    contentText = driver.find_element_by_id('Title').text #定位元素
    print(contentText) #验证结果
    driver.quit()

    部分HTML页面:

    <header id="header">
    <a href="#" class="logo"><strong id="Title" style="display: none">AAAA</strong></a>
    </header>

    执行结果:

    127.0.0.1 - - [16/Nov/2017 19:14:56] "GET /HimoMP HTTP/1.1" 200 -
    127.0.0.1 - - [16/Nov/2017 19:14:56] "GET /static/css/main.css HTTP/1.1" 200 -
    127.0.0.1 - - [16/Nov/2017 19:14:56] "GET /static/js/jquery.min.js HTTP/1.1" 200 -
    127.0.0.1 - - [16/Nov/2017 19:14:56] "GET /static/js/skel.min.js HTTP/1.1" 200 -
    127.0.0.1 - - [16/Nov/2017 19:14:56] "GET /static/js/util.js HTTP/1.1" 200 -
    127.0.0.1 - - [16/Nov/2017 19:14:56] "GET /static/js/main.js HTTP/1.1" 200 -
    127.0.0.1 - - [16/Nov/2017 19:14:56] "GET /static/css/font-awesome.min.css HTTP/1.1" 200 -
    127.0.0.1 - - [16/Nov/2017 19:14:57] "GET /static/fonts/fontawesome-webfont.woff2?v=4.6.3 HTTP/1.1" 200 -
    127.0.0.1 - - [16/Nov/2017 19:14:57] "GET /favicon.ico HTTP/1.1" 404 -
    AAAA
    [Finished in 9.5s]

    亲测可用。

  • 用js把display属性改成其他的,比如:block。

  • 嘿嘿,也不知道你是不是这个意思,我的想法是将这个testcase作为一个公用的方法。然后在testcase中调用并且控制执行次数。
    下面贴一小段code。献丑了 哈哈。

    import unittest

    def add(x):
    #读取数据,转化为数组、字典、矩阵等。
    a = [1, 2, 3, 4]
    b = [5, 6, 7, 8]

    #业务计算逻辑。
    return (a[x] + b[x])

    class MyTest(unittest.TestCase):

    def setUp(self):
    print('setUp')

    def test_case_B(self):
    #可以返回数组长度作为循环停止的条件,视具体情况定。
    for x in range(0, 4):
    print(add(x))
    #用断言对返回的结果做判断。

    def tearDown(self):
    print('tear down')

    if __name__ == '__main__':
    unittest.main()

    执行结果如下:

    setUp
    6
    8
    10
    12
    tear down
    ----------------------------------------------------------------------
    Ran 1 test in 0.000s
    OK
    [Finished in 0.1s]
  • 😂 其实对手机来说手指上划的操作和你鼠标点着不放拖动的效果是一样的。 因为微信页面一般也是一个H5页面。 一开始我就看了标题以为是selenium 然后发现是appnium 哈哈,溜了。不过可以发我一个页面地址让我去试试么。