使用Go-VCR测试Go Web Scraper

时间:2017-02-02 03:03:32

标签: testing go web-scraping

我是Go语言的新手,它是资源,但是一直在寻找相当长的一段时间而没有任何运气找到我正在寻找的东西。因此,如果有资源,我为重复的问题道歉,并希望被指导。

我的目标只是建立一个网络刮刀。我正在使用chromedp,它具有专注于元素,填写文本等功能。我想创建一个测试环境/服务器,以便在开发期间对其进行测试。主要原因是我不想经常从网站创建GET请求(出于共同的礼貌),但也能够脱机工作,此外它还应该使测试更快一些。我偶然发现了go-vcr库并一直试图让它工作,但无济于事。我可以让它记录并创建一个.yaml,但我无法弄清楚如何测试超出原始的html反弹并存储在.yaml文件中。我的理解是,可以使用库复制网站和功能,但我无法拼凑出如何做到这一点。

我正在尝试做什么,或者是go-vcr库(或任何测试/假冒服务器)只能返回静态数据,因此渲染任何我想用web刮刀测试的东西可能的?

我之前没有发布任何代码,因为我没有拼凑到比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)
    }
}

0 个答案:

没有答案