当前位置: 首页 > 面试题库 >

通过Jenkins运行phpunit测试时如何设置$ _SERVER ['']变量

庞元青
2023-03-14
问题内容

我试图为不可能进行大量代码更改的应用程序编写单元测试。代码库中几乎所有的.php文件都使用一些$ _SERVER [‘’]变量,例如

require_once $_SERVER['DOCUMENT_ROOT'] . '/mainApi.php';

因此,现在当我不得不编写和运行PHPUnit测试用例时,必须以某种方式设置这些变量。目前,我正在用户环境中设置这些变量,然后执行

$_SERVER['DOCUMENT_ROOT'] = getenv('DOCUMENT_ROOT');
require_once $_SERVER['DOCUMENT_ROOT'] . '/mainApi.php';

这样获取服务器变量工作正常。我通过命令行以方式运行测试$ phpunit test.php

Ques1: 通过命令行运行phpunit测试时,是否可以设置$ _SERVER变量?

我还必须通过Jenkins运行这些单元测试,但无法通过ANT / build文件设置这些服务器变量。

Ques2:
是否可以通过Jenkins中的ant构建文件或通过运行任何Shell脚本来设置这些变量,然后再通过Jenkins执行phpunit测试?

我尝试通过外壳脚本导出服务器变量

    export DOCUMENT_ROOT=/server/path-to-root-dir

然后在Jenkins的build.xml中调用该脚本

<export name="setEnv" description="set server var">
    <exec executable="sh">
       <arg value = "sumit.sh" />
    </exec> 
</target>

但它不起作用。有什么我可以做的设置吗?谢谢!


问题答案:

我不确定#1,但是PHPUnit本身必须支持它。我看不到通过命令行执行此操作的任何方法。但是,如果您将当前的解决方法放入其中bootstrap.php,则不必在每个测试中都这样做。

对于#2,<exec>允许您使用嵌套<env>元素设置环境变量。我在詹金斯使用这个。

<exec executable="phpunit" ...>
    <env key="DOCUMENT_ROOT" value="/var/www/php"/>
</exec>

更新:
您通常会创建bootstrap.php安装程序,将源目录添加到包含路径,并根据需要初始化测试环境。与PHPUnit不同,此文件不是由PHPUnit提供的phpunit.xml

我将其放置在与相同的目录中phpunit.xml,但这是因为每个项目都有一个单独的文件。它进入通常保存测试的目录中。这使您可以从命令行运行phpunit,而无需告诉它如何查找那些配置文件。否则,您必须使用--bootstrap和/或--configuration指向它们。

这是我构建典型项目的方式:

<project-root>/
    build.xml
    src/
        MyClass.php
    test/
        MyClassTest.php
        phpunit.xml
        bootstrap.php


 类似资料:
  • 我有一个运行selenium phpunit测试的ant构建脚本。我可以在命令行上运行构建脚本,然后看到测试正在进行,浏览器窗口打开,并且selenium测试正在执行。命令行上一切正常。 但是,如果我得到创建一个jenkins jobs来运行构建脚本。它在尝试运行phpunit任务时失败。这是控制台输出。 看起来,当jenkins运行构建时,它不能访问Selenium。请参阅“访问被拒绝”和“网页

  • 问题内容: 有人尝试过将Dojo DOH单元测试与Jenkins集成吗? 我想执行以下操作,但是如果已经完成,则不想重新发明它。所以,我在想: 从Jenkins的构建后步骤开始DOH测试,然后等待结果 在无头浏览器(例如Crowbar)中自己运行测试 从Crowbar返回的HTML解析成功/错误计数 查找(或编写)一个Jenkins插件,该插件将(a)如果测试失败会导致构建失败;(b)呈现测试结果

  • 我有一台linux机器(比如m1)[一台openStack机器]来运行我的jmeter测试。我的典型过程是将最新的jmx文件放在这台机器上,并在以下命令下触发:nohup/path/to/jmeter/bin/jmeter-n-t/path/to/script/test。jmx-l/path/to/resultsFolder/results。jtl 现在,我想通过jenkins作业触发相同的测试,

  • 问题内容: 我正在尝试设置脚本以增加Xcode项目的内部版本号。我进行了一次API调用以获取当前的内部版本号,然后我希望对其进行递增,然后将该新的版本号用作环境变量,以便Xcode插件可以使用它。 我安装了EnvInject插件,但是我不知道如何将var从我的shell脚本中获取到环境变量中。 这设置为我需要的值,但是如何将其分配给环境变量,以便以后在工作中访问它? 问题答案: 添加一个构建步骤以

  • 我想通过Jenkins/Hudson运行用Java编写的本地Selenium测试脚本。是否可以从我的本地windows机器运行脚本?到目前为止,我已经用Java编写了一些简单的Selenium测试,如果我通过Eclipse IDE执行它们,这些测试运行得非常好。我将感谢一个深入的解释。

  • 作为一名测试人员,我希望通过使用PHPUnit来测试代码的安全性和可靠性。 目前,PHPUnit只通过了11项测试中的第一项。然后它放弃其余的测试,没有消息。 我尝试过的: 删除PHPUnit,清除我的缓存(),并重新安装PHPUnit() 确保每个测试文档字符串中都有 使用\test[a-zA-Z]\作为函数名 使用phpunit--filter[未运行的测试的名称] 将PHPUnit从v8.4