• 你学习方向最后不是自己也写了么?

    不过最终还是需要什么学什么,要不学了用不上的东西,不到半年就还回去了,而且也经不起面试。

  • 可以多试几个 hook 函数,找到最适合自己的。应该有函数可用的。

    如果实在没有,那就规范限制 tearDown 里不要做 refresh 操作咯,或者考虑换个测试框架。毕竟 unittest 是 python 自带的一个能满足基本单测要求的框架而已,不是为集成测试设计的,功能丰富度不是很高。实际项目要支持各种扩展,一般用 pytest 或者 nose

  • 有点好奇,你们跑自动化领导还会盯着么,不是都放柜子里,通过报告之类的方式去看结果的么。

  • 两次刷新/get url,我觉得不太好

    具体是为啥不太好?为了让它不刷新,付出的成本比收益高,而且可能引起其他额外问题(比如有的 web 框架切换展示内容是不会改变 url 的,所以判断 url 并不准确)

    对于你这个点,还有一种常用的办法,就是不要用原生 driver ,用你自己额外封装的 driver(driver 实例可以在 BaseTestCase 里面初始化,后面的用例只管用就是了)。然后改写里面的 get_url 方法,让它全部都先判断,不一致再切换 url。

  • 楼主是不是应该先说下自己需求? 这个定义在不同人理解还是差异挺大的。

  • 1、你说的执行前和执行后,指的是 setUp 和 tearDown 吗?如果是,那可以把这些部分放在父类的方法里,子类 setUp 方法第一行调用下 super() 就好

    2、这个场景,建议你可以直接不用做判断,直接都进入设定的 url,这样就不用 if else 了。由于这个部分每个 case 对应 url 有点不一样,复用度不高,建议你还是写在 case 里吧。

    3、原理上可以实现,但这样有点把业务的东西带到框架里了,对框架通用性不大好,这点建议要综合考虑。

  • 1、每个用例出错进行截图,这个建议直接在 unittest 的 fail hook 里面直接加就好了,不用弄 BaseTestCase,如果有 driver 实例,那就调用一下 driver 的截图函数。写用例的人不用管任何事情。
    fail hook 可以用这个方法 https://docs.python.org/zh-tw/3/library/unittest.html#unittest.TestResult.addFailure ,使用的实例可参考 https://github.com/SeldomQA/HTMLTestRunner/blob/master/TestRunner/HTMLTestRunner.py

    2、没看懂你这个场景。能否举个具体的例子说明一下?
    装饰器本身对应的是设计模式里的装饰器模式(https://www.runoob.com/design-pattern/decorator-pattern.html),是有自己对应的典型使用场景的,没看懂你的场景所以不知道是否适合。但装饰器应该是不支持继承的,所以应该做不到父类该函数加了装饰器,子类就可以不用加。

  • MTSC 参会感受 at 2020年11月27日

    都有,社区公众号留言 ppt 就有了。历年的都有

  • MTSC 参会感受 at 2020年11月26日

    建议留意开源专场的议题,议题内容基本都是开源的工具平台相关,是可以直接拿来用的。

  • 那如果设备的数据不是存在服务器而是存在本地数据库,可以抓到设备的数据吗

    和数据存哪里没关系,关键是有没有做过网络传输。有做过应该就可以抓(前提是 http 协议)

    另外,你文中提到的 刷新不了的,而且抓不了包 ,能把详细信息说下么?这个信息太少了,可能原因很多(比如代理参数配置错了/app 写死了不走代理/app 判定 SSL 证书不对自动停掉网络传输...),无法判定原因。

  • 我现在试了下,可以的。

    现在多加了一个地址,你在公众号用一样的关键字发送就有回复了。可以 2 个地址都试试?

  • 那个估计是百度网盘看到下载量大自动封掉的,社区没有下架过。
    可以现在再试试,昨晚试了是可以的。

  • 1、你这个东西可以看看 logger 的 handler ,这个机制就是用于日志多处打印且可能每一处都有不同要求的。但是估计要你自己写个自定义的 handler 实现,对接到你这个自定义的报告模块
    2、错误信息加错误截图,可以把图片信息以 base64 形式 +html image 标签 存到你输出到 html 报告的日志里,这样 html 报告就能展示图片,且不用额外搞别的图床。缺点是 html 文件会因此变大,因为内嵌了图片,建议做下图片压缩。

    比较好奇你这个是啥报告框架,竟然要用到 io.StringIO 来写入

  • 手机上手动安装并信任 fildder 的 ssl 证书了么?

  • MTSC 参会感受 at 2020年11月23日

    hmm,代码质量这个真的不好说,这个是内功了。

    其实很多优秀的工具框架原版的代码质量都不算很好(时间一有压力自然会选择快而不一定好的方案),只是基本开源前都会去修补一番避免太丢人。以前还听说过某大厂开源框架在开源前一周全体补注释、单测和做重构的。

  • MTSC 参会感受 at 2020年11月22日

    这些都是在开发层面的,那么测试开发中的测试怎么体现出来,仅仅是开发的工具应用于测试么?

    没太理解这句话,能否分享下您比较期望通过大会了解到什么内容,而这次大会没有提供到?我们也很希望了解到大家这方面的反馈,看后续如何改进。

  • 不知道你想要多自动化?如果是自动化,teardown 的时候自动删就行了。如果是人工测试用,那总归得人去触发的,系统不知道你啥时候用完数据。

    不过测试环境其实没必要删,每次都用新数据那老数据删不删都无所谓的,想办法让数据尽量不容易撞车就行。

  • 1、每次都跑完整流程,换订单号
    2、跑完后调用删数据接口,或者直接操作数据库/缓存删数据

  • 注册功能用不了:

  • 客气啦,有收获就好。

  • 是的。。。还是老老实实 logger.info() 这么写吧。

  • 要把 self.logger 省掉也是可以的:

    class BaseCase(unittest.TestCase):
    
        @classmethod
        def setUpClass(cls) -> None:
            # 获取当前时间
            now = timer.current_time("%Y_%m_%d")
            filename = dir_config.logs_dir + r"\{}.log".format(now)
            # 格式
            # %(asctime)s 打印日志时间 %(filename)s: 打印当前执行程序名
            # %(lineno)d: 打印日志的当前行号 %(levelname)s: 打印日志级别名称 %(message)s: 打印日志信息
            fmt = "%(asctime)s %(filename)s %(funcName)s [line:%(lineno)d ] %(levelname)s %(message)s"
            date_fmt = "%a %d %b %Y %H:%M:%S"
            # 打印到控制台
            stream_handler = logging.StreamHandler()
            stream_handler.setLevel(logging.ERROR)
            # 回滚文件输出
            rotating_handler = RotatingFileHandler(filename, maxBytes=1024 * 1024 * 5, backupCount=10)
            # 设置logging的输入内容形式及输出渠道
            logging.basicConfig(format=fmt,
                                datefmt=date_fmt,
                                level=logging.INFO,
                                handlers=[stream_handler, rotating_handler])
            cls.logger = logging.getLogger(cls.__name__)
    
      def log(str):
          self.logger.info()
    

    子类里面直接调用 log("我是日志") 就可以打印日志了,基本简化到和你 Logger("日志") 差不多了,但看你有没有必要咯,别人看起来可能会比较奇怪。

    PS: 上面不建议搞静态(类)方法,静态和动态混在一起会比较乱,全动态方法(不带有 @classmethod 注解的方法)就好了,这样每个子类都是独立的,不会相互影响,也比较清晰。

  • 没找到账号密码?

  • 从技术角度,在百度上输入关键字 - 点击搜索,到界面见到搜索结果,大概有几个步骤:

    1、前端把输入框的值封装到接口数据里,发起接口请求。
    2、接口请求经过漫长的链路(各种网关、路由),到达百度的机房并到达搜索服务
    3、搜索服务内部进行搜索处理(里面还有各种内部流程)
    4、搜索服务返回结果
    5、经过漫长的链路,浏览器收到搜索处理结果(纯数据格式)
    6、前端把数据变为界面元素,展示到浏览器

    在公网,2、5 的耗时是不稳定的,而整体来说最大的耗时一般在 4、6 两步。那你这里的测试百度查询服务,是从 1-6 么?如果是,最好的是高速录像机录像 + 多次测试,从用户角度来看,更准确。
    如果只需要 1-5,那直接 Jmeter 模拟请求即可。

    爬虫的方法不大建议,因为爬虫是在 6 的基础上再增加了一个步骤的,耗时会比 1-6 要高一些,稍微不那么准确

  • 这就是继承了 logging.Logger 模块,是可以做到你说的 filter 、handler 赋初值。但这个我理解不改变 logger 的调用方式吧?