Testing 用Go-VCR测试Go-Web刮刀

Testing 用Go-VCR测试Go-Web刮刀,testing,go,web-scraping,Testing,Go,Web Scraping,我对围棋语言和它的资源比较新,但是已经四处寻找了很长一段时间,没有找到我想要的东西。因此,如果有一个资源在那里为它,我为重复的问题道歉,并将感谢被引导这样做 我的目标只是构建一个web刮板。我正在使用chromedp,它具有关注元素、填充文本等功能。我想创建一个测试环境/服务器,以便在开发期间对其进行测试。主要原因是,我不想经常从网站创建GET请求(出于礼貌),但也能够脱机工作,此外,它还应该使测试速度加快一点。我偶然发现了go vcr库,并一直试图让它工作,但没有结果。我可以让它记录并创建一个

我对围棋语言和它的资源比较新,但是已经四处寻找了很长一段时间,没有找到我想要的东西。因此,如果有一个资源在那里为它,我为重复的问题道歉,并将感谢被引导这样做

我的目标只是构建一个web刮板。我正在使用chromedp,它具有关注元素、填充文本等功能。我想创建一个测试环境/服务器,以便在开发期间对其进行测试。主要原因是,我不想经常从网站创建GET请求(出于礼貌),但也能够脱机工作,此外,它还应该使测试速度加快一点。我偶然发现了go vcr库,并一直试图让它工作,但没有结果。我可以让它记录并创建一个
.yaml
,但我不知道如何在原始html之外进行测试,原始html会反弹并存储在
.yaml
文件中。我的理解是,使用库复制网站及其功能是可能的,但我无法拼凑如何做到这一点

我想做的是可能的,还是go vcr库(或任何测试/伪造服务器)只能返回静态数据,因此无法呈现我想用web scraper测试的任何内容

我没有发布任何代码,只是因为我没有拼凑出比go vcr存储库中给出的示例更多的代码

我希望我能够以一种有意义的方式解释这一点。如果不是的话,我很乐意回答问题来澄清

更新:为了方便起见,添加示例代码。我理解它的这一部分是如何工作的(我认为),我可以用它来测试我是否抓取了静态页面的适当元素,但理想情况下(作为一个例子),我希望能够用我的程序填充文本框,并测试我是否成功找到文本框并填充,而无需点击实时网页

package vcr_test

import (
    "io/ioutil"
    "net/http"
    "strings"
    "testing"

    "github.com/dnaeon/go-vcr/recorder"
)

func TestSimple(t *testing.T) {
    // Start our recorder
    r, err := recorder.New("fixtures/golang-org")
    if err != nil {
        t.Fatal(err)
    }
    defer r.Stop() // Make sure recorder is stopped once done with it

    // Create an HTTP client and inject our transport
    client := &http.Client{
        Transport: r, // Inject as transport!
    }

    url := "http://golang.org/"
    resp, err := client.Get(url)
    if err != nil {
        t.Fatalf("Failed to get url %s: %s", url, err)
    }

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        t.Fatalf("Failed to read response body: %s", err)
    }

    wantTitle := "<title>The Go Programming Language</title>"
    bodyContent := string(body)

    if !strings.Contains(bodyContent, wantTitle) {
        t.Errorf("Title %s not found in response", wantTitle)
    }
}
封装vcr\u测试
进口(
“io/ioutil”
“net/http”
“字符串”
“测试”
“github.com/dnaeon/go录像机/录像机”
)
func TestSimple(t*testing.t){
//启动录音机
r、 err:=recorder.New(“fixtures/golang org”)
如果错误!=零{
t、 致命的(错误)
}
延时r.Stop()//确保记录器在使用完毕后停止
//创建一个HTTP客户端并注入我们的传输
客户端:=&http.client{
传输:r,//作为传输注入!
}
url:=”http://golang.org/"
resp,err:=client.Get(url)
如果错误!=零{
t、 Fatalf(“无法获取url%s:%s”,url,错误)
}
body,err:=ioutil.ReadAll(resp.body)
如果错误!=零{
t、 Fatalf(“未能读取响应正文:%s”,错误)
}
wantTitle:=“Go编程语言”
bodyContent:=字符串(正文)
if!strings.Contains(bodyContent,wantTitle){
t、 错误(“响应中未找到标题%s”,wantTitle)
}
}

为什么不自己写呢?@马克,这是个好主意!正如我在帖子中提到的,我对这门语言比较新。我的编程经验仅限于构建网站(主要使用Rails或Angular)并通过Heroku或Firebase托管。我肯定会考虑构建自己的web服务器,但这似乎有点高级(只是因为我还不太了解它)。我也不确定这是否是我想要的功能。我想复制/录制一个网站(例如stackoverflow),这样我就可以用一个网页刮板四处浏览,满足我对它们的兴趣,而不会造成干扰。