如何解决如何对Web抓取服务php单元进行单元测试
我目前正在用PHP + Laravel开发一个项目,该项目需要从两个不同的网站上抓取数据。我正在使用Goutte剪贴库。我有10个集成测试,在这里我使用Goutte客户端提供的Crawler对象,以获取要从每个网站抓取的特定数据。
测试工作得很好(我什至使用感染库进行了突变测试)...但是事实是,我认为可以对所有功能进行单元测试(因此,测试运行速度更快)。
我尝试遵循的方法是从两个网站中的每个网站上抓取所有html文件,并断言所抓取的html等于我在项目中本地拥有的本地html文件,并且该HTML文件与报废了。因此,如果我的本地html和报废的html相同,则可以将数据从本地html传递给以特定html标签为目标的函数,以检索所需的信息。我希望这有道理
我希望我的代码能给大家带来更多启发:
我的测试类如下:
private $html;
protected function setUp() :void
{
$myHtml= fopen("path\myLocal.html","r");
$this->html = fread($myHtml,filesize("path\myLocal.html"));
fclose($myHtml);
}
public function test_webScrapping_returns_html()
{
$scrapper = new WebScraping();
$url = "www.the-url-I-wanna-scrape.com";
$scrappedHtml= $scrapper->getHtml($url);
$this->assertTrue($scrappedHtml=== $this->html);
}
WebScraping模型的getHtml()函数如下所示:
public function getHtml(string $url)
{
$client = new Client(); //I know that I should not intantiate the Goutte Client here (inject in __constructor intead?)
$html = $client->request('GET',$url)->html();
return $html;
}
问题是,如果我dd($this->html)
或dd($scrappedHtml)
,内容几乎是相同的……唯一的区别是,\n
和\r
相互穿插另一个没有。所以...两个HTML都具有相同的内容,但我不能断言它们是相等的。我所缺少的???我是在正确的道路上吗?还是您会采取完全不同的方法?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。