单元测试 PHPUnit 如何处理登录依赖?

自《PHPUnit-实现 API 接口的自动化测试》开始,我们在测试上面投入了不少精力,也有了些进展;目前正在使用 Python 进行 API 接口测试。
在测试时,总有些接口会依赖登录;目前 Python 的处理是将 cookie 记录到文件中,有时谈论起来,听口气也不是很方便;单元测试 用例的组织 也是一个问题;
最近 RPC Yar 引入后的问题 引导我们重新审视 PHPUnit,Peter 在 自底向上的 PHP 单元测试 中对 @dataProvider 的使用是一个好契机,说明我们对于单元测试的投入在增强;
- phpunit.de 官网;
- phpunit.cn 中文网;

本文主要谈一下如何处理登录依赖的问题;

测例的组织问题
  • phpunit.xml 文件;
  • phpunit 的 --testsuite 选项;
  • phpunit 的 --filter 选项;
  • @group 标注,--group,--exclude-group 选项;
为何登录要单独处理?
  • 多个接口可以共享;
  • 可以单独一个类,便于在多个类之间共享;
实现要点
  • 源代码标注 @dataProvider
  • Test Dependencies 从降低测试耦合性来看,不适合使用;或许使用的方法和场景不对;
phpunit.xml
  • testsuites 指定目录;

    
        
            ./tests/v14
        
    

phpunit 命令行选项和参数
  • phpunit 执行当前目录下由 phpunit.xml 定义的所有 testsuites 符合条件的 test cases;
  • --filter Filter which tests to run.
    phpunit --filter 'testC35' 表示只执行符合 testC35 正则表达式的测例;
    要想只执行某一个测例,--filter 就是一个好方法;在编写测例时,节省时间;
  • --testsuite Filter which testsuite to run.
    可以指定执行 phpunit.xml 文件中定义的哪个 testsuit;
  • phpunit 直接指定一个路径参数则执行该路径下所有 test cases;
  • --configuration 指定配置文件,默认当前目录下 phpunit.xml;
关于单元测试的一种观点
  • 每个测例都是独立的,依赖性应当充分审慎;
  • 由于测例是独立的,测例可以任何顺序执行;
  • 每个测例应当初始化和销毁自己需要的一切;
    最好的做法就是测例之间最好不要共享对象和状态;
  • SOLID 的 SRP:Single Responsibility Principle;
    Single responsibility
    Open–closed
    Liskov substitution
    Interface segregation
    Dependency inversion
  • 通常测例是按照由上到下执行的,@depends 也是这样的;
    如果被依赖的测例没有执行或者执行失败,则主测例被跳过(skiped),所以 @depends 与顺序无关,不是用来解决顺序问题的;
  • 测例的独立性有助于缺陷定位(defect localization);
  • XUnit Test Patterns;

你可能感兴趣的:(单元测试 PHPUnit 如何处理登录依赖?)