This is an automated email from the ASF dual-hosted git repository.
git-site-role pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/beam.git
The following commit(s) were added to refs/heads/asf-site by this push:
new 39db1b1 Publishing website 2020/07/15 00:02:02 at commit 3f3bd49
39db1b1 is described below
commit 39db1b10a366e757f18ab04fd7900d0229fa4617
Author: jenkins <[email protected]>
AuthorDate: Wed Jul 15 00:02:02 2020 +0000
Publishing website 2020/07/15 00:02:02 at commit 3f3bd49
---
.../pipelines/test-your-pipeline/index.html | 141 +++++++++++++++------
website/generated-content/sitemap.xml | 2 +-
2 files changed, 105 insertions(+), 38 deletions(-)
diff --git
a/website/generated-content/documentation/pipelines/test-your-pipeline/index.html
b/website/generated-content/documentation/pipelines/test-your-pipeline/index.html
index 68fa566..f67b9d7 100644
---
a/website/generated-content/documentation/pipelines/test-your-pipeline/index.html
+++
b/website/generated-content/documentation/pipelines/test-your-pipeline/index.html
@@ -1,51 +1,93 @@
<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta
http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport
content="width=device-width,initial-scale=1"><title>Test Your
Pipeline</title><meta name=description content="Apache Beam is an open source,
unified model and set of language-specific SDKs for defining and executing data
processing workflows, and also data ingestion and integration flows, supporting
Enterprise Integration Patterns (EIPs) and Domain Spe [...]
<span class=sr-only>Toggle navigation</span>
<span class=icon-bar></span><span class=icon-bar></span><span
class=icon-bar></span></button>
-<a href=/ class=navbar-brand><img alt=Brand style=height:25px
src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask
closed"></div><div id=navbar class="navbar-container closed"><ul class="nav
navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a
href=/documentation/>Documentation</a></li><li><a
href=/documentation/sdks/java/>Languages</a></li><li><a
href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a
href=/roadmap/>Roadmap</a></li>< [...]
+<a href=/ class=navbar-brand><img alt=Brand style=height:25px
src=/images/beam_logo_navbar.png></a></div><div class="navbar-mask
closed"></div><div id=navbar class="navbar-container closed"><ul class="nav
navbar-nav"><li><a href=/get-started/beam-overview/>Get Started</a></li><li><a
href=/documentation/>Documentation</a></li><li><a
href=/documentation/sdks/java/>Languages</a></li><li><a
href=/documentation/runners/capability-matrix/>RUNNERS</a></li><li><a
href=/roadmap/>Roadmap</a></li>< [...]
+ <span
class=o>...</span></code></pre></div></div><blockquote><p><strong>Note:</strong>
Read about testing unbounded pipelines in Beam in <a
href=/blog/2016/10/20/test-stream.html>this blog post</a>.</p></blockquote><h3
id=using-the-create-transform>Using the Create Transform</h3><p>You can use the
<code>Create</code> transform to create a <code>PCollection</code> out of a
standard in-memory collection class, such as Java or Python <code>List</code>.
See <a href=/documentation/program [...]
<span class=c1>// Check whether a PCollection contains some elements in any
order.
</span><span class=c1></span><span class=n>PAssert</span><span
class=o>.</span><span class=na>that</span><span class=o>(</span><span
class=n>output</span><span class=o>)</span>
<span class=o>.</span><span class=na>containsInAnyOrder</span><span
class=o>(</span>
<span class=s>"elem1"</span><span class=o>,</span>
<span class=s>"elem3"</span><span class=o>,</span>
- <span class=s>"elem2"</span><span
class=o>);</span></code></pre></div></div><p>Any code that uses
<code>PAssert</code> must link in <code>JUnit</code> and <code>Hamcrest</code>.
If you’re using Maven, you can link in <code>Hamcrest</code> by adding
the following dependency to your project’s <code>pom.xml</code>
file:</p><div class=language-java><div class=highlight><pre class=chroma><code
class=language-java data-lang=java><span class=o><</span><span class=n>depe
[...]
+ <span class=s>"elem2"</span><span
class=o>);</span></code></pre></div></div><div class=language-py><div
class=highlight><pre class=chroma><code class=language-py data-lang=py><span
class=kn>from</span> <span class=nn>apache_beam.testing.util</span> <span
class=kn>import</span> <span class=n>assert_that</span>
+<span class=kn>from</span> <span class=nn>apache_beam.testing.util</span>
<span class=kn>import</span> <span class=n>equal_to</span>
+
+<span class=n>output</span> <span class=o>=</span> <span class=o>...</span>
+
+<span class=c1># Check whether a PCollection contains some elements in any
order.</span>
+<span class=n>assert_that</span><span class=p>(</span>
+ <span class=n>output</span><span class=p>,</span>
+ <span class=n>equal_to</span><span class=p>([</span><span
class=s2>"elem1"</span><span class=p>,</span> <span
class=s2>"elem3"</span><span class=p>,</span> <span
class=s2>"elem2"</span><span
class=p>]))</span></code></pre></div></div><p class=language-java>Any Java code
that uses <code>PAssert</code> must link in <code>JUnit</code> and
<code>Hamcrest</code>. If you’re using Maven, you can link in
<code>Hamcrest</code> by adding the following dependency t [...]
<span class=o><</span><span class=n>groupId</span><span
class=o>></span><span class=n>org</span><span class=o>.</span><span
class=na>hamcrest</span><span class=o></</span><span
class=n>groupId</span><span class=o>></span>
<span class=o><</span><span class=n>artifactId</span><span
class=o>></span><span class=n>hamcrest</span><span class=o>-</span><span
class=n>all</span><span class=o></</span><span
class=n>artifactId</span><span class=o>></span>
<span class=o><</span><span class=n>version</span><span
class=o>></span><span class=n>1</span><span class=o>.</span><span
class=na>3</span><span class=o></</span><span class=n>version</span><span
class=o>></span>
<span class=o><</span><span class=n>scope</span><span
class=o>></span><span class=n>test</span><span class=o></</span><span
class=n>scope</span><span class=o>></span>
-<span class=o></</span><span class=n>dependency</span><span
class=o>></span></code></pre></div></div><p>For more information on how
these classes work, see the <a
href=https://beam.apache.org/releases/javadoc/2.22.0/index.html?org/apache/beam/sdk/testing/package-summary.html>org.apache.beam.sdk.testing</a>
package documentation.</p><h3 id=an-example-test-for-a-composite-transform>An
Example Test for a Composite Transform</h3><p>The following code shows a
complete test for a composi [...]
-
-<span class=c1>// Our static input data, which will make up the initial
PCollection.
-</span><span class=c1></span><span class=kd>static</span> <span
class=kd>final</span> <span class=n>String</span><span class=o>[]</span> <span
class=n>WORDS_ARRAY</span> <span class=o>=</span> <span class=k>new</span>
<span class=n>String</span><span class=o>[]</span> <span class=o>{</span>
-<span class=s>"hi"</span><span class=o>,</span> <span
class=s>"there"</span><span class=o>,</span> <span
class=s>"hi"</span><span class=o>,</span> <span
class=s>"hi"</span><span class=o>,</span> <span
class=s>"sue"</span><span class=o>,</span> <span
class=s>"bob"</span><span class=o>,</span>
-<span class=s>"hi"</span><span class=o>,</span> <span
class=s>"sue"</span><span class=o>,</span> <span
class=s>""</span><span class=o>,</span> <span
class=s>""</span><span class=o>,</span> <span
class=s>"ZOW"</span><span class=o>,</span> <span
class=s>"bob"</span><span class=o>,</span> <span
class=s>""</span><span class=o>};</span>
-
-<span class=kd>static</span> <span class=kd>final</span> <span
class=n>List</span><span class=o><</span><span class=n>String</span><span
class=o>></span> <span class=n>WORDS</span> <span class=o>=</span> <span
class=n>Arrays</span><span class=o>.</span><span class=na>asList</span><span
class=o>(</span><span class=n>WORDS_ARRAY</span><span class=o>);</span>
-
-<span class=kd>public</span> <span class=kt>void</span> <span
class=nf>testCount</span><span class=o>()</span> <span class=o>{</span>
- <span class=c1>// Create a test pipeline.
-</span><span class=c1></span> <span class=n>Pipeline</span> <span
class=n>p</span> <span class=o>=</span> <span class=n>TestPipeline</span><span
class=o>.</span><span class=na>create</span><span class=o>();</span>
-
- <span class=c1>// Create an input PCollection.
-</span><span class=c1></span> <span class=n>PCollection</span><span
class=o><</span><span class=n>String</span><span class=o>></span> <span
class=n>input</span> <span class=o>=</span> <span class=n>p</span><span
class=o>.</span><span class=na>apply</span><span class=o>(</span><span
class=n>Create</span><span class=o>.</span><span class=na>of</span><span
class=o>(</span><span class=n>WORDS</span><span class=o>)).</span><span
class=na>setCoder</span><span class=o>(</span><span class [...]
-
- <span class=c1>// Apply the Count transform under test.
-</span><span class=c1></span> <span class=n>PCollection</span><span
class=o><</span><span class=n>KV</span><span class=o><</span><span
class=n>String</span><span class=o>,</span> <span class=n>Long</span><span
class=o>>></span> <span class=n>output</span> <span class=o>=</span>
- <span class=n>input</span><span class=o>.</span><span
class=na>apply</span><span class=o>(</span><span class=n>Count</span><span
class=o>.<</span><span class=n>String</span><span class=o>></span><span
class=n>perElement</span><span class=o>());</span>
-
- <span class=c1>// Assert on the results.
-</span><span class=c1></span> <span class=n>PAssert</span><span
class=o>.</span><span class=na>that</span><span class=o>(</span><span
class=n>output</span><span class=o>)</span>
- <span class=o>.</span><span class=na>containsInAnyOrder</span><span
class=o>(</span>
- <span class=n>KV</span><span class=o>.</span><span
class=na>of</span><span class=o>(</span><span class=s>"hi"</span><span
class=o>,</span> <span class=n>4L</span><span class=o>),</span>
- <span class=n>KV</span><span class=o>.</span><span
class=na>of</span><span class=o>(</span><span
class=s>"there"</span><span class=o>,</span> <span
class=n>1L</span><span class=o>),</span>
- <span class=n>KV</span><span class=o>.</span><span
class=na>of</span><span class=o>(</span><span class=s>"sue"</span><span
class=o>,</span> <span class=n>2L</span><span class=o>),</span>
- <span class=n>KV</span><span class=o>.</span><span
class=na>of</span><span class=o>(</span><span class=s>"bob"</span><span
class=o>,</span> <span class=n>2L</span><span class=o>),</span>
- <span class=n>KV</span><span class=o>.</span><span
class=na>of</span><span class=o>(</span><span class=s>""</span><span
class=o>,</span> <span class=n>3L</span><span class=o>),</span>
- <span class=n>KV</span><span class=o>.</span><span
class=na>of</span><span class=o>(</span><span class=s>"ZOW"</span><span
class=o>,</span> <span class=n>1L</span><span class=o>));</span>
-
- <span class=c1>// Run the pipeline.
-</span><span class=c1></span> <span class=n>p</span><span
class=o>.</span><span class=na>run</span><span class=o>();</span>
-<span class=o>}</span></code></pre></div></div><h2
id=testing-a-pipeline-end-to-end>Testing a Pipeline End-to-End</h2><p>You can
use the test classes in the Beam SDKs (such as <code>TestPipeline</code> and
<code>PAssert</code> in the Beam SDK for Java) to test an entire pipeline
end-to-end. Typically, to test an entire pipeline, you do the
following:</p><ul><li>For every source of input data to your pipeline, create
some known static test input data.</li><li>Create some static test outpu [...]
+<span class=o></</span><span class=n>dependency</span><span
class=o>></span></code></pre></div></div><p>For more information on how
these classes work, see the <a
href=https://beam.apache.org/releases/javadoc/2.22.0/index.html?org/apache/beam/sdk/testing/package-summary.html>org.apache.beam.sdk.testing</a>
package documentation.</p><h3 id=an-example-test-for-a-composite-transform>An
Example Test for a Composite Transform</h3><p>The following code shows a
complete test for a composi [...]
+
+ <span class=c1>// Our static input data, which will make up the initial
PCollection.
+</span><span class=c1></span> <span class=kd>static</span> <span
class=kd>final</span> <span class=n>String</span><span class=o>[]</span> <span
class=n>WORDS_ARRAY</span> <span class=o>=</span> <span class=k>new</span>
<span class=n>String</span><span class=o>[]</span> <span class=o>{</span>
+ <span class=s>"hi"</span><span class=o>,</span> <span
class=s>"there"</span><span class=o>,</span> <span
class=s>"hi"</span><span class=o>,</span> <span
class=s>"hi"</span><span class=o>,</span> <span
class=s>"sue"</span><span class=o>,</span> <span
class=s>"bob"</span><span class=o>,</span>
+ <span class=s>"hi"</span><span class=o>,</span> <span
class=s>"sue"</span><span class=o>,</span> <span
class=s>""</span><span class=o>,</span> <span
class=s>""</span><span class=o>,</span> <span
class=s>"ZOW"</span><span class=o>,</span> <span
class=s>"bob"</span><span class=o>,</span> <span
class=s>""</span><span class=o>};</span>
+
+ <span class=kd>static</span> <span class=kd>final</span> <span
class=n>List</span><span class=o><</span><span class=n>String</span><span
class=o>></span> <span class=n>WORDS</span> <span class=o>=</span> <span
class=n>Arrays</span><span class=o>.</span><span class=na>asList</span><span
class=o>(</span><span class=n>WORDS_ARRAY</span><span class=o>);</span>
+
+ <span class=kd>public</span> <span class=kt>void</span> <span
class=nf>testCount</span><span class=o>()</span> <span class=o>{</span>
+ <span class=c1>// Create a test pipeline.
+</span><span class=c1></span> <span class=n>Pipeline</span> <span
class=n>p</span> <span class=o>=</span> <span class=n>TestPipeline</span><span
class=o>.</span><span class=na>create</span><span class=o>();</span>
+
+ <span class=c1>// Create an input PCollection.
+</span><span class=c1></span> <span class=n>PCollection</span><span
class=o><</span><span class=n>String</span><span class=o>></span> <span
class=n>input</span> <span class=o>=</span> <span class=n>p</span><span
class=o>.</span><span class=na>apply</span><span class=o>(</span><span
class=n>Create</span><span class=o>.</span><span class=na>of</span><span
class=o>(</span><span class=n>WORDS</span><span class=o>));</span>
+
+ <span class=c1>// Apply the Count transform under test.
+</span><span class=c1></span> <span class=n>PCollection</span><span
class=o><</span><span class=n>KV</span><span class=o><</span><span
class=n>String</span><span class=o>,</span> <span class=n>Long</span><span
class=o>>></span> <span class=n>output</span> <span class=o>=</span>
+ <span class=n>input</span><span class=o>.</span><span
class=na>apply</span><span class=o>(</span><span class=n>Count</span><span
class=o>.<</span><span class=n>String</span><span class=o>></span><span
class=n>perElement</span><span class=o>());</span>
+
+ <span class=c1>// Assert on the results.
+</span><span class=c1></span> <span class=n>PAssert</span><span
class=o>.</span><span class=na>that</span><span class=o>(</span><span
class=n>output</span><span class=o>)</span>
+ <span class=o>.</span><span class=na>containsInAnyOrder</span><span
class=o>(</span>
+ <span class=n>KV</span><span class=o>.</span><span
class=na>of</span><span class=o>(</span><span class=s>"hi"</span><span
class=o>,</span> <span class=n>4L</span><span class=o>),</span>
+ <span class=n>KV</span><span class=o>.</span><span
class=na>of</span><span class=o>(</span><span
class=s>"there"</span><span class=o>,</span> <span
class=n>1L</span><span class=o>),</span>
+ <span class=n>KV</span><span class=o>.</span><span
class=na>of</span><span class=o>(</span><span class=s>"sue"</span><span
class=o>,</span> <span class=n>2L</span><span class=o>),</span>
+ <span class=n>KV</span><span class=o>.</span><span
class=na>of</span><span class=o>(</span><span class=s>"bob"</span><span
class=o>,</span> <span class=n>2L</span><span class=o>),</span>
+ <span class=n>KV</span><span class=o>.</span><span
class=na>of</span><span class=o>(</span><span class=s>""</span><span
class=o>,</span> <span class=n>3L</span><span class=o>),</span>
+ <span class=n>KV</span><span class=o>.</span><span
class=na>of</span><span class=o>(</span><span class=s>"ZOW"</span><span
class=o>,</span> <span class=n>1L</span><span class=o>));</span>
+
+ <span class=c1>// Run the pipeline.
+</span><span class=c1></span> <span class=n>p</span><span
class=o>.</span><span class=na>run</span><span class=o>();</span>
+ <span class=o>}</span>
+<span class=o>}</span></code></pre></div></div><div class=language-py><div
class=highlight><pre class=chroma><code class=language-py data-lang=py><span
class=kn>from</span> <span class=nn>apache_beam.testing.util</span> <span
class=kn>import</span> <span class=n>assert_that</span>
+<span class=kn>from</span> <span class=nn>apache_beam.testing.util</span>
<span class=kn>import</span> <span class=n>equal_to</span>
+
+<span class=k>class</span> <span class=nc>CountTest</span><span
class=p>(</span><span class=n>unittest</span><span class=o>.</span><span
class=n>TestCase</span><span class=p>):</span>
+
+ <span class=c1># Our static input data, which will make up the initial
PCollection.</span>
+ <span class=n>WORDS</span> <span class=o>=</span> <span class=p>[</span>
+ <span class=s2>"hi"</span><span class=p>,</span> <span
class=s2>"there"</span><span class=p>,</span> <span
class=s2>"hi"</span><span class=p>,</span> <span
class=s2>"hi"</span><span class=p>,</span> <span
class=s2>"sue"</span><span class=p>,</span> <span
class=s2>"bob"</span><span class=p>,</span>
+ <span class=s2>"hi"</span><span class=p>,</span> <span
class=s2>"sue"</span><span class=p>,</span> <span
class=s2>""</span><span class=p>,</span> <span
class=s2>""</span><span class=p>,</span> <span
class=s2>"ZOW"</span><span class=p>,</span> <span
class=s2>"bob"</span><span class=p>,</span> <span
class=s2>""</span>
+ <span class=p>]</span>
+
+ <span class=k>def</span> <span class=nf>test_count</span><span
class=p>(</span><span class=bp>self</span><span class=p>):</span>
+ <span class=c1># Create a test pipeline.</span>
+ <span class=k>with</span> <span class=n>beam</span><span
class=o>.</span><span class=n>TestPipeline</span> <span class=k>as</span> <span
class=n>p</span><span class=p>:</span>
+
+ <span class=c1># Create an input PCollection.</span>
+ <span class=nb>input</span> <span class=o>=</span> <span
class=n>p</span> <span class=o>|</span> <span class=n>beam</span><span
class=o>.</span><span class=n>Create</span><span class=p>(</span><span
class=n>WORDS</span><span class=p>);</span>
+
+ <span class=c1># Apply the Count transform under test.</span>
+ <span class=n>output</span> <span class=o>=</span> <span
class=nb>input</span> <span class=o>|</span> <span class=n>beam</span><span
class=o>.</span><span class=n>combiners</span><span class=o>.</span><span
class=n>Count</span><span class=o>.</span><span class=n>PerElement</span><span
class=p>();</span>
+
+ <span class=c1># Assert on the results.</span>
+ <span class=n>assert_that</span><span class=p>(</span>
+ <span class=n>output</span><span class=p>,</span>
+ <span class=n>equal_to</span><span class=p>([</span>
+ <span class=p>(</span><span class=s2>"hi"</span><span
class=p>,</span> <span class=mi>4</span><span class=p>),</span>
+ <span class=p>(</span><span class=s2>"there"</span><span
class=p>,</span> <span class=mi>1</span><span class=p>),</span>
+ <span class=p>(</span><span class=s2>"sue"</span><span
class=p>,</span> <span class=mi>2</span><span class=p>),</span>
+ <span class=p>(</span><span class=s2>"bob"</span><span
class=p>,</span> <span class=mi>2</span><span class=p>),</span>
+ <span class=p>(</span><span class=s2>""</span><span
class=p>,</span> <span class=mi>3</span><span class=p>),</span>
+ <span class=p>(</span><span class=s2>"ZOW"</span><span
class=p>,</span> <span class=mi>1</span><span class=p>)])</span>
+
+ <span class=c1># The pipeline will run and verify the
results.</span></code></pre></div></div><h2
id=testing-a-pipeline-end-to-end>Testing a Pipeline End-to-End</h2><p>You can
use the test classes in the Beam SDKs (such as <code>TestPipeline</code> and
<code>PAssert</code> in the Beam SDK for Java) to test an entire pipeline
end-to-end. Typically, to test an entire pipeline, you do the
following:</p><ul><li>For every source of input data to your pipeline, create
some known static t [...]
<span class=c1>// Our static input data, which will comprise the initial
PCollection.
</span><span class=c1></span> <span class=kd>static</span> <span
class=kd>final</span> <span class=n>String</span><span class=o>[]</span> <span
class=n>WORDS_ARRAY</span> <span class=o>=</span> <span class=k>new</span>
<span class=n>String</span><span class=o>[]</span> <span class=o>{</span>
@@ -64,7 +106,7 @@
<span class=n>Pipeline</span> <span class=n>p</span> <span
class=o>=</span> <span class=n>TestPipeline</span><span class=o>.</span><span
class=na>create</span><span class=o>();</span>
<span class=c1>// Create a PCollection from the WORDS static input data.
-</span><span class=c1></span> <span class=n>PCollection</span><span
class=o><</span><span class=n>String</span><span class=o>></span> <span
class=n>input</span> <span class=o>=</span> <span class=n>p</span><span
class=o>.</span><span class=na>apply</span><span class=o>(</span><span
class=n>Create</span><span class=o>.</span><span class=na>of</span><span
class=o>(</span><span class=n>WORDS</span><span class=o>)).</span><span
class=na>setCoder</span><span class=o>(</span><span c [...]
+</span><span class=c1></span> <span class=n>PCollection</span><span
class=o><</span><span class=n>String</span><span class=o>></span> <span
class=n>input</span> <span class=o>=</span> <span class=n>p</span><span
class=o>.</span><span class=na>apply</span><span class=o>(</span><span
class=n>Create</span><span class=o>.</span><span class=na>of</span><span
class=o>(</span><span class=n>WORDS</span><span class=o>));</span>
<span class=c1>// Run ALL the pipeline's transforms (in this case,
the CountWords composite transform).
</span><span class=c1></span> <span class=n>PCollection</span><span
class=o><</span><span class=n>String</span><span class=o>></span> <span
class=n>output</span> <span class=o>=</span> <span class=n>input</span><span
class=o>.</span><span class=na>apply</span><span class=o>(</span><span
class=k>new</span> <span class=n>CountWords</span><span class=o>());</span>
@@ -75,7 +117,32 @@
<span class=c1>// Run the pipeline.
</span><span class=c1></span> <span class=n>p</span><span
class=o>.</span><span class=na>run</span><span class=o>();</span>
<span class=o>}</span>
-<span class=o>}</span></code></pre></div></div></div></div><footer
class=footer><div class=footer__contained><div class=footer__cols><div
class=footer__cols__col><div class=footer__cols__col__logo><img
src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div
class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg
class=footer__logo alt="Apache logo"></div></div><div class="footer__cols__col
footer__cols__col--md"><div class=footer__cols__col__title>Sta [...]
+<span class=o>}</span></code></pre></div></div><div class=language-py><div
class=highlight><pre class=chroma><code class=language-py data-lang=py><span
class=k>class</span> <span class=nc>WordCountTest</span><span
class=p>(</span><span class=n>unittest</span><span class=o>.</span><span
class=n>TestCase</span><span class=p>):</span>
+
+ <span class=c1># Our input data, which will make up the initial
PCollection.</span>
+ <span class=n>WORDS</span> <span class=o>=</span> <span class=p>[</span>
+ <span class=s2>"hi"</span><span class=p>,</span> <span
class=s2>"there"</span><span class=p>,</span> <span
class=s2>"hi"</span><span class=p>,</span> <span
class=s2>"hi"</span><span class=p>,</span> <span
class=s2>"sue"</span><span class=p>,</span> <span
class=s2>"bob"</span><span class=p>,</span>
+ <span class=s2>"hi"</span><span class=p>,</span> <span
class=s2>"sue"</span><span class=p>,</span> <span
class=s2>""</span><span class=p>,</span> <span
class=s2>""</span><span class=p>,</span> <span
class=s2>"ZOW"</span><span class=p>,</span> <span
class=s2>"bob"</span><span class=p>,</span> <span
class=s2>""</span>
+ <span class=p>]</span>
+
+ <span class=c1># Our output data, which is the expected data that the final
PCollection must match.</span>
+ <span class=n>EXPECTED_COUNTS</span> <span class=o>=</span> <span
class=p>[</span><span class=s2>"hi: 5"</span><span class=p>,</span>
<span class=s2>"there: 1"</span><span class=p>,</span> <span
class=s2>"sue: 2"</span><span class=p>,</span> <span class=s2>"bob:
2"</span><span class=p>]</span>
+
+ <span class=c1># Example test that tests the pipeline's
transforms.</span>
+
+ <span class=k>def</span> <span class=nf>test_count_words</span><span
class=p>(</span><span class=bp>self</span><span class=p>):</span>
+ <span class=k>with</span> <span class=n>TestPipeline</span><span
class=p>()</span> <span class=k>as</span> <span class=n>p</span><span
class=p>:</span>
+
+ <span class=c1># Create a PCollection from the WORDS static input
data.</span>
+ <span class=nb>input</span> <span class=o>=</span> <span
class=n>p</span> <span class=o>|</span> <span class=n>beam</span><span
class=o>.</span><span class=n>Create</span><span class=p>(</span><span
class=n>WORDS</span><span class=p>)</span>
+
+ <span class=c1># Run ALL the pipeline's transforms (in this case,
the CountWords composite transform).</span>
+ <span class=n>output</span> <span class=o>=</span> <span
class=nb>input</span> <span class=o>|</span> <span
class=n>CountWords</span><span class=p>()</span>
+
+ <span class=c1># Assert that the output PCollection matches the
EXPECTED_COUNTS data.</span>
+ <span class=n>assert_that</span><span class=p>(</span><span
class=n>output</span><span class=p>,</span> <span class=n>equal_to</span><span
class=p>(</span><span class=n>EXPECTED_COUNTS</span><span class=p>),</span>
<span class=n>label</span><span class=o>=</span><span
class=s1>'CheckOutput'</span><span class=p>)</span>
+
+ <span class=c1># The pipeline will run and verify the
results.</span></code></pre></div></div></div></div><footer class=footer><div
class=footer__contained><div class=footer__cols><div
class=footer__cols__col><div class=footer__cols__col__logo><img
src=/images/beam_logo_circle.svg class=footer__logo alt="Beam logo"></div><div
class=footer__cols__col__logo><img src=/images/apache_logo_circle.svg
class=footer__logo alt="Apache logo"></div></div><div class="footer__cols__col
footer__col [...]
<a href=http://www.apache.org>The Apache Software Foundation</a>
| <a href=/privacy_policy>Privacy Policy</a>
| <a href=/feed.xml>RSS Feed</a><br><br>Apache Beam, Apache, Beam, the Beam
logo, and the Apache feather logo are either registered trademarks or
trademarks of The Apache Software Foundation. All other products or name brands
are trademarks of their respective holders, including The Apache Software
Foundation.</div></footer></body></html>
\ No newline at end of file
diff --git a/website/generated-content/sitemap.xml
b/website/generated-content/sitemap.xml
index 47f25e5..b7e5795 100644
--- a/website/generated-content/sitemap.xml
+++ b/website/generated-content/sitemap.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?><urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml"><url><loc>/blog/beam-2.22.0/</loc><lastmod>2020-06-08T14:13:37-07:00</lastmod></url><url><loc>/categories/blog/</loc><lastmod>2020-06-08T14:13:37-07:00</lastmod></url><url><loc>/blog/</loc><lastmod>2020-06-08T14:13:37-07:00</lastmod></url><url><loc>/categories/</loc><lastmod>2020-06-08T14:13:37-07:00</lastmod></url><url><loc>/blog/b
[...]
\ No newline at end of file
+<?xml version="1.0" encoding="utf-8" standalone="yes"?><urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml"><url><loc>/blog/beam-2.22.0/</loc><lastmod>2020-06-08T14:13:37-07:00</lastmod></url><url><loc>/categories/blog/</loc><lastmod>2020-06-08T14:13:37-07:00</lastmod></url><url><loc>/blog/</loc><lastmod>2020-06-08T14:13:37-07:00</lastmod></url><url><loc>/categories/</loc><lastmod>2020-06-08T14:13:37-07:00</lastmod></url><url><loc>/blog/b
[...]
\ No newline at end of file