弗雷德(Fred)是一种用于比较网站的两个实例的OpenSource视觉回归工具。弗雷德(Fred)负责自动回归测试,目的是通过比较当前(基线)和更新的网站版本来确保功能不会破坏。弗雷德比较以下内容:
视觉分析计算归一化的平方误差以及基线和更新站点的屏幕截图上的结构相似性索引,而视觉AI则通过应用图像分割机器学习技术来识别高级文本和图像视觉结构来独立地进行布局和内容独立变化。这降低了动态内容产生误报的影响。
如果需要,请使用弗雷德:
弗雷德(Fred)设计为可扩展。它具有内部队列,可以根据可用的RAM和CPU(或GPU)的数量并行处理网站。
_fred-v1中可用版本1.0的整个存储库。请注意,v2.x(当前版本)不包含用于训练/重新训练ML模型的代码。如果您需要这样做,请检查V1文件夹中的原始代码。这些模型是相同的,因此,如果您创建了自定义训练的模型,请将其插入V2中,并且可以工作。 您可以启动Fred作为Docker或本地流程。
如果您只想克隆并运行该软件,我们提供了一个Dockerfile。运行它:
git clone https://github.com/adobe/frontend-regression-validator.git
cd frontend-regression-validator/docker
docker build --no-cache -t fred .
docker run -p 5000:5000 -m 8g --memory-reservation=8g --oom-kill-disable=True --memory-swap 8G fred如果您仍然遇到不在内存错误的问题,请从UI Docker应用程序中分配更多内存。只需单击工具栏中的Docker图标,转到Preferences - Advanced ,然后将滑块拉到8GB或更多,尤其是当您打算使用ML(可选)时。我们建议在本地运行它,而不是使用Dockerfile或将分配给Docker的存储器增加到at least 8GB, prefferably 16GB 。
确保您已经安装了chromedriver 。如果没有它,请在Mac上安装它:
brew tap homebrew/cask && brew cask install chromedriver
或在Linux上使用:
sudo apt-get install chromium-chromedriver
然后运行以下内容:
git clone https://github.com/adobe/frontend-regression-validator.git
cd frontend-regression-validator
pip install -r requirements.txt
cd fred/ml
cat model_files.bz2.parta* > model_files.bz2
tar xjf model_files.bz2
cd ..
python3 run.py
这将启动一个烧瓶实例,该实例可以回答请求以及提供Web用户界面。 QuickNote:使用--port指定听力端口,默认情况下它会在5000上听。请在此处查看有关Fred的启动参数的更多详细信息。
与FRED的互动是由Web UI或API调用完成的。 UI仅允许用户将呼叫发送到API端点并查看结果。
要打开Web接口导航到http://0.0.0.0:5000/static/submit.html 5000/static/submit.html(相应地调整端口)。填写所有必需的字段,运行工作并等到完成。通过单击标题中的Jobs链接来查看结果。
要使用API,请在此处查看专用的API读数。
弗雷德(Fred)等待,直到收到执行网站比较的请求(发布到/api/verify )。它启动了爬网过程。我们可以请求查看所有作业,并呼叫/api/viewjobs ,并获得特定作业的状态,并以a get /api/results提供作业ID作为参数。
因此,弗雷德的输入是一对可以比较的URL。
该过程开始于Fred爬上URL以提取许多页面以进行比较,然后渲染每个页面并进行屏幕截图。
比较控制台和网络日志。
分析每个屏幕截图(作为基线/更新的屏幕截图,对于每个指定分辨率)。
如果启用,每个屏幕截图对也会进行ML分析
结果将在本地保存(用户必须通过API定期检查状态,直到设置status Done和/或设置某些error为止。)
结果是report密钥中包含许多分数的JSON对象。 overall_divergence分数是网络,视觉和视觉(如果启用)差异的加权总和。得分为0意味着完美匹配(基线和更新之间没有差异),而得分较高,最多100突出显示差异。
如果需要,请使用视觉接口快速研究结果。否则,该report还包含指向原始图像的链接以及分析图像,如果您想以自动方式使用Fred,则突出显示差异。
由于Fred设计为可扩展,因此在逻辑上分为两个组件: crawler和ML 。 crawler组件是用户与之交互的主要入口点。 ML组件虽然与crawler组件的代码相同,但只是侦听API调用的另一个端点。这种分裂背后的逻辑是GPU昂贵,而CPU却不是。因此,我们可以有许多爬行者,又可以向启用GPU的FRED实例(称为ML组件)提出请求来执行ML分析。
例如,想象一个场景,我们每天有1000个网站进行分析。我们创建10台虚拟机,每台具有32GB RAM和8个VCPU。每个实例将接收100 /api/verify调用。假设我们将--crawler_threads设置为5,这意味着我们可以同时爬网5个网站。此外,由于我们只有一台带有4 GPU的GPU机器,因此我们在其上启动了FRED实例,我们将称为ML组件。在这种情况下,我们将--ai_threads设置为4,这意味着我们同时运行4个ML验证。现在,在每个帖子API请求上,我们将ml_address设置为crawler组件ml地址。现在将发生的事情是,每当crawler组件完成爬网和分析(非AI)网站对时,它将发送其ML组件的屏幕截图并要求进行分析。 ml组件将在队列中添加此请求,当有GPU时,它将在其上进行比较。完成后,它将自动报告给原始的crawler组件的分析。基本上,此方法与可用测试机的数量线性缩放性能。
Fred Runtimes在网站的复杂性上差异很大。大部分时间都花在爬网组件中,因为(不幸的是)加载网站不是确定性的过程。有时,网站只是悬挂,或者随机出现弹出窗口,或者某些外部资源拒绝加载。在内部,我们有唯一的补救措施:如果发生可怕的事情,可以重新加载网站的一种try-catch 。但是,这是一个事实,即我们在页面上说加载后等待几秒钟,再加上重复的屏幕截图以发现动态内容,大大增加了爬网时间。
爬行部分通常需要2-10分钟,具体取决于爬行的页面数量。
视觉分析(每个屏幕截图最多限于20百万像素)每个图像对需要约5-10秒。每个额外的分辨率表示另一组图像对。
AI(ML)视觉分析在GPU上的每个图像对需要0-30秒。任何GPU都会做,即使是旧的K80也会非常快,因为ML PAR是U-NET(堆叠的卷积层)。您总是可以在CPU上运行,但是每图像对可能会等待5分钟,而不是每个图像对30秒。
总体而言,启用ML的爬网的经验法则是每页1分钟或更短的时间。